据我所知,写时复制不是std::string
在C++ 11中实现符合性的可行方法,但最近在讨论中我发现自己无法直接支持该语句.
我是否正确C++ 11不承认基于COW的实现std::string
?
如果是这样,这个限制是否在新标准(其中)的某处明确说明了?
或者这个限制是否暗示,因为新要求的综合影响std::string
排除了基于COW的实施std::string
.在这种情况下,我会对"C++ 11有效禁止基于COW的std::string
实现" 的章节和样式推导感兴趣.
我今天和我的同事想知道是否可以实现std :: vector来利用小缓冲区优化.通过查看C++ 11草案,我在23.3.1p8阅读
表达式a.swap(b),对于除数组之外的标准容器类型的容器a和b,应交换a和b的值,而不对单个容器元素调用任何移动,复制或交换操作.
这开始似乎取决于小缓冲区优化,但在as-if规则下,我们将被允许仍然对非类类型进行小缓冲区优化(因为我们无法观察到正在完成的复制).下一个文字似乎更难"傻瓜"
在交换之前引用一个容器中的元素的每个迭代器应该在交换之后引用另一个容器中的相同元素.
这是否足以阻止为std :: vector实现小缓冲区优化?有没有其他的路障或最终有可能有SBO的std :: vector?