Draft C++14 包括运行时大小的数组和 std::dynarray
容器。据我所知,两者之间唯一真正的区别是 std::dynarray
有一个 STL 接口(interface)(例如,begin
、end
, 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/