我一直认为在C ++中声明一个数组时,大小必须是一个常数整数值。
例如:
int MyArray[5]; // correct
或
const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
但
int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
以下是The C++ Programming Language, by Bjarne Stroustrup中解释的内容:
数组的元素数量(数组绑定)必须是常量表达式(§C.5)。 如果需要变量边界,请使用向量(§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。
我有什么遗失的吗?
答案 0 :(得分:28)
这是标准的GCC扩展:see here。
当您使用其中一个扩展程序时,可以使用-pedantic
选项导致GCC发出警告,或-std=c++98
发出错误(如果担心可移植性)。< / p>
答案 1 :(得分:5)
您正在使用C99中的一个名为VLA(可变长度数组)的功能。如果您编译这样的程序会更好:
g++ -Wall -std=c++98 myprog.cpp