可能重复:
为什么我不能创建一个大小由全局变量确定的数组?
这是常量大小为4的简单数组的定义,它存储在堆栈内存中:
int array[4];
Run Code Online (Sandbox Code Playgroud)
现在如果我想在堆栈中声明动态大小的数组,我似乎应该编写这段代码:
int n;
cin >> n;
int array[n];
Run Code Online (Sandbox Code Playgroud)
但正如我们所知,这在C++中是不允许的,而是我们可以编写这个,它将在动态内存(即堆)中创建数组:
int n;
cin >> n;
int *array = new int[n];
Run Code Online (Sandbox Code Playgroud)
但这更慢并且(因为使用了新的运算符)并且需要在我们完成数组工作后调用delete []运算符.
所以我的问题在这里:
int n;
cin >> n;
int array[n];
Run Code Online (Sandbox Code Playgroud)
如果使用g ++,这将有效.g ++支持VLA作为扩展.但是,ISO C++要求将数组的大小作为常量表达式,即在编译时必须知道大小.
为什么C++不允许在堆栈内存中创建动态长度数组?
简单回答"因为标准这么说".即使即将推出的C++标准(C++ 0x)也不允许使用可变长度数组.
顺便说一句,我们总是std::vector用C++.所以没有理由担心.:)