【发布时间】:2014-07-15 08:27:48
【问题描述】:
在我的 C++ 程序中,有时我会这样做:
std::cin >> my_int;
my_class my_array[my_int];
当我在 OSX 上使用 g++ 编译它时,我得到:
错误:非 POD 元素类型的可变长度数组
正如预期的那样。但是,当我在 Ubuntu 上编译它时,我没有收到任何错误。在这两种情况下,我都没有任何选项进行编译。
供参考,g++ --version 在 OSX 输出上:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
在 Ubuntu 上输出:
g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
关于为什么我没有收到错误的任何想法?
P.S.:我试过 apt-get update 和 apt-get install g++ 但由于某种原因,我得到的回应是我有最新版本,如果我没记错的话是 4.9.0,我没有...
【问题讨论】:
-
如你所见,你的OS X系统上的“g++”实际上是clang。
-
正确,但是
g++没有抛出错误的原因仍然是个谜。 -
不需要编译器来报告无效 C++ 代码的错误。他们都被允许实现“语言扩展”,从可能无法编译的代码中生成工作二进制文件。 简而言之:您应该期望正确 C++ 能够编译,但您应该不期望 不正确 C++。
-
@DrewDormann:每个符合 C++ 编译器都必须为任何违反某些规则的程序发出至少一条诊断消息。默认情况下,g++ 不是符合标准的 C++ 编译器。
-
@KeithThompson 非常有趣!谢谢你分享。我已经过了我的编辑窗口,所以在上面和下面 +1...