【发布时间】:2013-10-07 07:24:11
【问题描述】:
C++14 呈现std::dynarray:
std::dynarray 是一个序列容器,它用 尺寸在施工时固定,在整个施工过程中不会改变 对象的生命周期。
std::dynarray 必须与std::vector 一样在运行时分配。
那么std::dynarray 有什么好处和用途,而我们可以使用更具动态性(并且还可以调整大小)的std::vector?
【问题讨论】:
-
@yasouser,不,这与
valarray无关。它是动态的,因为数组的长度是一个运行时值,它不需要在编译时知道,不像std::array -
请注意,在上周的 C++ 标准委员会会议上,
dynarray已从 C++14 中删除并放入未来的技术规范(将其视为 TR1 的新版本),因为它具有一些严重的技术问题。 -
@MM.:首先:目前似乎没有实现——这是一个非常糟糕的迹象,标准委员会学会了不指定未经过良好测试的功能的艰难方法(例如导出,动态异常规范,...)第二:
dynarray在堆栈上分配的事实导致了几个潜在的新陷阱(例如,堆栈空间不足),所有这些都导致未定义的行为,此外还阻止了诸如移动语义之类的优化...在我看来,这似乎是一个隐藏在类似 STL 的层 VLA 后面,有充分的理由在 C++ 中没有采用它。 -
@LuisMachuca:非常非常非常迟的回复:
dynarray应尽可能进行堆栈分配(如果编译器 + 库支持)并仅使用堆分配 (new[])如果这是不可能的,则作为后备......(例如,当不支持或不适用时) -
dynarray 不再是 C++14 草案的一部分