可能重复:
C/C++:运行时的数组大小是否允许动态分配?
在下面的清单中,显然大小buf由运行时常量决定j.编译器如何生成代码以在堆栈上分配存储(不知道j编译时的值)?
#include<iostream>
#include<cstdlib>
using namespace std;
int main(){
srandom(time(NULL));
int i = random();
cout<< "random number: "<<i<<endl;
if(i%2==0)
i=2;
else
i=1;
const int j=i;
char buf[j];
std::cout<<"size of buf array: "<<sizeof(buf)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我假设您使用的是gcc,因此也就是VLA扩展.这不是标准的C++,而是从C++ 0x(1x)中删除.
原因在于,由于类型系统较强,C++实现并不比C语言实现复杂得多.
实际上,如果你是堆栈分配未知大小的数组,你同时编写危险的代码,可能会很好地破坏堆栈.如果您知道大小,则它不是问题,否则只是动态分配它.当然有完全有效的用例,它是一个"很好的"功能,但他们最终决定反对它.