我已经使用C++几年了,今天我看到了一些代码,但这怎么能完全合法呢?
int main(int argc, char **argv)
{
size_t size;
cin >> size;
int array[size];
for(size_t i = 0; i < size; i++)
{
array[i] = i;
cout << i << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据海湾合作委员会编制.
如何在没有new或没有运行时确定大小malloc?
只是为了仔细检查,我用谷歌搜索了一些和我的所有类似的代码声称存储大小错误.
甚至Deitel的C++如何编程p.共同编程错误4.5下的261个状态:
只有常量可用于声明自动和静态数组的大小.
给我看.
我一直认为在C++中声明一个数组时,大小必须是一个常量整数值.
例如 :
int MyArray[5]; // correct
Run Code Online (Sandbox Code Playgroud)
要么
const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
Run Code Online (Sandbox Code Playgroud)
但
int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
Run Code Online (Sandbox Code Playgroud)
以下是Bjarne Stroustrup在C++编程语言中的解释:
数组的元素数量(数组绑定)必须是常量表达式(§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
}
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,上面的代码在我的系统上编译得很好!
这是我试图编译的内容:
void f(int i) {
int v2[i];
}
int main()
{
int i = 3;
int v1[i];
f(5);
}
Run Code Online (Sandbox Code Playgroud)
我没有错!我正在使用GCC v4.4.0.
有什么我想念的吗?