我一直认为在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。
有什么我失踪了吗?
这就是为什么用编译器测试东西并不代表任何代码正确性的原因。 – GManNickG 2010-05-19 06:37:34
重复的 http://stackoverflow.com/questions/737240/c-c-array-size-at-run-time-w-o-dynamic-allocation-is-allowed – nico 2010-05-19 06:40:22