#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
int size;
cin >> size;
int myArray[size]; //this shouldn't compile , right ?
return 0;
}
我以为这不会编译,但实际上它会编译(使用 g++ 命令)。
我后来发现 GCC 实际上允许可变大小数组,即使标准 C++ 不支持可变大小数组,这很奇怪!因为我听到每个人都说创建可变大小数组的唯一方法是使用动态分配,例如 int* array = new int[size];
或更好的 std::vector
。我以为 GCC 不允许那段代码!
无论如何,我的理论问题是,myArray
数组分配在堆 或 堆栈 区域?
最佳答案
那是编译器端的扩展。 它是如何工作的?嗯,它只在某种程度上起作用。
实现基本上将堆栈指针移动一个数量,该数量取决于数组的大小,并通过数组的名称调用中间的内存。它仅在某种程度上起作用,因为在 VLA 中,大小不是类型的组成部分,这意味着许多可用于常规数组的构造无法使用此类型完成,例如通过引用将数组传递给模板... sizeof
通常提供,但作为运行时构造实现。
关于c++ - 静态分配的可变大小数组如何在 C++ 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485180/