c++ - 为什么在 C++14 中同时使用运行时大小的数组和 std::dynarray?

标签 c++ c++14 dynamic-arrays dynarray

Draft C++14 包括运行时大小的数组和 std::dynarray 容器。据我所知,两者之间唯一真正的区别是 std::dynarray 有一个 STL 接口(interface)(例如,beginend , size 等),而运行时大小的数组则没有。那么为什么 C++14 两者都需要呢?

我知道运行时大小的数组是核心语言的一部分,而 std::dynarray 是标准库的一部分,但是 the proposal for std::dynarray清楚地表明,在许多情况下,作者希望编译器为 std::dynarray 提供特殊支持,以便它尽可能高效,即与运行时大小的数组一样高效。因此,语言/库的区别似乎有些人为。

那么,为什么 C++14 需要运行时大小的数组和 std::dynarray?并且鉴于 std::dynarray 具有更丰富的(STLified)接口(interface),为什么不直接删除运行时大小的数组,假设 std::dynarray 可以用相等的运行时实现效率?

澄清

当我谈到“运行时大小的数组”时,我指的是 N3639 中描述的新 C++14 核心语言功能。 ,而不是传统的 C 数组或 VLA 或 C++11 中的任何内容。

最佳答案

N3639建议在 C++ 中添加具有自动存储持续时间的本地运行时大小的数组。

N2648表示为了与 C++ 实践保持一致,std::dynarray 不仅可以用于自动变量。但是为了利用效率堆栈分配,我们希望使 dynarray 在用作自动变量时可优化。

简而言之,C11 样式运行时大小的数组仅限于存储在堆栈中。 dynarray 不是,但可以在存储在堆栈上时进行优化,使其与 C11 样式运行时大小的数组一样高效(或者目标是这样)。

C11 风格的运行时大小的数组仍然是一种有用的语法,并且增加与 C 的互编译性的成本并不高:无论如何,必须实现该机制以实现高效的自动 dynarray。此外,C11 风格的运行时大小的数组是一等公民,无论程序员使用 std 库如何都存在。

实际的 C11 运行时大小的数组和 C++1y C11 风格的运行时大小的数组之间存在重要差异,其中最重要的区别是实际 C11 运行时大小的数组的运行时 sizeof支持。但它的基本用法可能是兼容的。

请注意,最后, 没有在 C++14 中添加。

关于c++ - 为什么在 C++14 中同时使用运行时大小的数组和 std::dynarray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353873/

相关文章:

c++ - unique_ptr 的 move 语义

delphi - 我可以调整 Delphi 数组的大小而不丢失其以前的内容吗?

c++ - 使用 % 运算符时出现 double 错误

c++ - 使用连接器 c++ 访问 MYSQL 数据库(如何添加到我的标准搜索目录的路径)

c++ - 尝试 std::lock[_unique] std::shared_mutex 的线程是否会被调用 std::lock_shared 的线程饿死?

c++ - 在 C++ 中使用带有参数类型检查的可变参数模板在编译时获取函数的参数数量

c++ - 结构的指针以及如何访问元素

d - 在 D 中创建编译时未知的静态数组

Java 空指针异常

c++ - 处理大量规则(条件和约束)CEP 系统