我真的不明白为什么我不能在堆栈上有一个可变大小的数组,所以像
foo(int n) {
int a[n];
}
据我了解,部分数据段的堆栈(-段)因此不是“恒定大小”。
最佳答案
根据 C++ 标准,C++ 中不允许使用可变长度数组 (VLA)。
包括 gcc 在内的许多编译器都支持它们作为编译器扩展,但重要的是要注意任何使用这种扩展的代码都是不可移植的。
C++ 提供 std::vector 用于实现与 VLA 类似的功能。
有一个 proposal 在 C++11 中引入可变长度数组,但最终被放弃,因为它需要对 C++ 中的类型系统进行大量更改。能够在堆栈上创建小数组而不浪费空间或为未使用的元素调用构造函数的好处被认为对于 C++ 类型系统的大更改来说不够重要。
关于c++ - 为什么堆栈中没有可变大小的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7812566/