用非常量variables声明数组大小

我一直认为在C ++中声明一个数组时,大小必须是一个常量整数值。

例如 :

int MyArray[5]; // correct 

要么

 const int ARRAY_SIZE = 6; int MyArray[ARRAY_SIZE]; // correct 

 int ArraySize = 5; int MyArray[ArraySize]; // incorrect 

这也是Bjarne Stroustrup在“C ++编程语言”中解释的内容:

数组元素的数量,数组绑定,必须是一个常量expression式(§C.5)。 如果你需要variables边界,使用一个vector(§3.7.1,§16.3)。 例如:

 void f(int i) { int v1[i]; // error : array size not a constant expression vector<int> v2(i); // ok } 

但令我惊讶的是,上面的代码在我的系统上编译得很好!

这是我试图编译的:

 void f(int i) { int v2[i]; } int main() { int i = 3; int v1[i]; f(5); } 

我没有错误! 我正在使用GCC v4.4.0。

有什么我失踪?

这是标准的GCC扩展: 请看这里 。

使用-pedantic选项可以使GCC发出警告,或者在使用其中一个扩展时(如果需要考虑可移植性),可以使用-std=c++98来创build错误。

您正在使用C99中称为VLA(可变长度数组)的function。 如果你像这样编译你的程序会更好:

 g++ -Wall -std=c++98 myprog.cpp