c++ - 根据 C++ 草案,运行时数组在堆栈上的界限

标签 c++ arrays c++11 g++ runtime

根据我之前阅读的理解,数组大小需要是常量并且在编译时已知,但 g++ 提供的支持 VLA 的附加支持除外。

然而,我正在阅读一份 C++ 草案,现在我很困惑,C++ 是否支持运行时数组边界。他们给出了以下定义数组的代码示例。

C++ 草稿链接:http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3690.pdf

第 8.3.4 节

例如:

void f(unsigned int n) {
int a[n]; // type of a is “array of runtime bound of int”
}

最佳答案

不,C++ 过去和现在都不支持具有运行时大小的数组。 N3690 是 C++11 和 C++14 之间的草案,其中包含提案 N3639 Runtime-sized arrays with automatic storage duration (revision 5) 中的文本。

该提案最终被废弃并在 C++14 draft N4140 中文本已被删除。

在查看草稿时,您可以将其用作“标准”的是

  • N3337 (C++11 + 编辑修复)
  • N4140 (C++14 + 编辑修复)
  • N4659 (2017 年 3 月 Kona 工作草案/C++17 DIS)

关于c++ - 根据 C++ 草案,运行时数组在堆栈上的界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60566659/

相关文章:

c++ - 从 vector 中删除项目的有效方法

c++ - 在if语句中需要帮助

c++ - 如何分配100字节的内存

java - 如果我的数组达到一定长度,Android 应用程序将无法运行

arrays - 遍历对象数组。如果找到正确的方法,则访问对象方法。否则在数组中创建一个新对象

c++ - 让可执行文件在多个 Linux 操作系统的 : 上运行

javascript - 如何在不使用 Object.assign 的情况下使用 javascript 将数组转换为对象

C++映射错误,有结构和方法,无法将字符串转换为_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<等

c++ - 可变参数模板类的部分特化是否应该支持非可变参数特化

c++ - 为什么 stringstream 停止接收字符串? [C++]