c++ - 为什么堆栈中没有可变大小的数组?

标签 c++ arrays dynamic-data

我真的不明白为什么我不能在堆栈上有一个可变大小的数组,所以像

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/

相关文章:

c++ - 生成范围内的随机数,不重复

c - 如何将 512 字节数组分割成更小的 block ?

Java:如何创建大型二维数组

C++ [] 映射,可能通过模板

c# - 我应该为新的 CRUD asp.net 应用程序使用 SubSonic 还是动态数据?

c++ - 指向 std::map 中的值的指针

c++ - 通过 fread 将 jpg/png 读入点数组

c++ - 省略 else 关键字

ASP.NET 动态数据 DisplayColumn 属性导致排序问题

c++ - 有什么方法可以将 static_assert 放入 ISO C++11 中的表达式中?