为什么我不能创建一个大小为n的数组?

Mih*_*yan 4 c++ memory arrays

可能重复:
为什么我不能创建一个大小由全局变量确定的数组?

这是常量大小为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 []运算符.

所以我的问题在这里:

  • 为什么C++不允许在堆栈内存中创建动态长度数组?

Pra*_*rav 9

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++.所以没有理由担心.:)