数组声明中的常量表达式

Jam*_*sev 4 c++ arrays constexpr

C++ Primer

必须在编译时知道数组维度,这意味着维度必须是常量表达式

另外一点是这样的

unsigned count = 42;           // not a constant expression
constexpr unsigned size = 42;  // a constant expression
Run Code Online (Sandbox Code Playgroud)

我会,然后期望以下声明失败

a[count];                      // Is an error according to Primer
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.编译并运行良好.

还有一点奇怪的是,++count;在数组声明之后也没有引起任何问题.

-std=c++11flag打开的程序g++4.71

这是为什么?

Ker*_* SB 8

您的代码实际上不是合法的C++.有些编译器允许使用可变长度数组作为扩展,但它不是标准的C++.为了让海湾合作委员会对此抱怨,请通过-pedantic.一般来说,你应该总是至少传递这些警告标志去GCC:

-W -Wall -Wextra -pedantic
Run Code Online (Sandbox Code Playgroud)