用非常量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