草案C++ 14包括运行时大小的数组和std::dynarray
容器.从我所知道的,两者之间的唯一真正的区别在于std::dynarray
有一个STL接口(例如begin
,end
,size
,等),同时运行时大小的数组没有.那么为什么C++ 14需要它们呢?
我知道运行时大小的数组是核心语言的std::dynarray
一部分,同时也是标准库的一部分,但是该提议std::dynarray
清楚地表明作者希望编译器在许多情况下能够提供特殊支持,std::dynarray
以便它可以高效尽可能地,即,与运行时大小的数组一样高效.因此,语言/库的区别似乎有点人为.
那么,为什么C++ 14需要两个运行时大小的数组std::dynarray
呢?并且鉴于它std::dynarray
具有更丰富的(STLified)接口,为什么不只是删除运行时大小的数组,假设std::dynarray
可以以相同的运行时效率实现?
澄清
当我谈到"运行时大小的数组"时,我指的是N3639中描述的新的C++ 14核心语言特性,而不是传统的C数组或VLA或C++ 11中的任何内容.
gcc 4.9现在支持n3696(具有自动存储持续时间的运行时大小的数组).n3662说:
在具有自动存储持续时间的N3497运行时大小的数组中,Jens Maurer建议使用运行时绑定的数组.这些数组是std :: dynarray,因为普通的固定大小数组是std :: array.
在这个邮件列表中,Jonathan Wakely说:
我们应该在手册中添加一个C++ 14状态表,但同时这里是库状态的快速摘要.
...
缺少这些:
- N3672添加实用程序类以表示可选对象的提议
- N3655 TransformationTraits Redux
- N3662 C++动态数组
- N3644空前向迭代器
特征一个很简单,但有点乏味,迭代器可能只影响调试模式,但其他两个是重要的工作.是否有人打算继续工作?
但是,n3662还说:
我们建议为数组定义一个新的工具,而不是采用C可变长度数组,其中元素的数量在构造时被绑定.我们将这些动态数组称为dynarray.
我似乎无法dynarray
在gcc
页面上使用快速CTRL + F. 所以dynarray
即将实施,并将variable length arrays
留下或将消失?