sya*_*yaz 58 c c++ array-initialization
我已经使用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个状态:
只有常量可用于声明自动和静态数组的大小.
给我看.
Meh*_*ari 53
这在C99中有效.
C99标准支持堆栈上的可变大小的数组.可能你的编译器也选择支持这个构造.
请注意,这与malloc
和不同new
.gcc
在堆栈上分配数组int array[100]
,就像调整堆栈指针一样.没有完成堆分配.这非常像_alloca
.
jpa*_*cek 20
这称为VLA(可变长度阵列).它在c99中是标准的,但是gcc允许它在c ++代码中作为扩展.如果你想让它拒绝代码,尝试尝试-std=standard
,-ansi
和-pedantic
选项.
小智 6
它是有效的 C99,它不是有效的 C++。这是两种语言之间的众多差异之一。