繁体   English   中英

C++ STL 容器要求 - 后置条件混淆

[英]C++ STL Container requirements - Post condition confusion

我目前正在考虑实现一个自定义容器,该容器需要与 STL 算法兼容,因此必须满足此处所述的 C++ 容器要求。

在该文档中, Methods and operators表指出,表达式a = b具有a == b的后置条件。 我对此感到非常困惑。 正如此表达式的表条目所述:

毁坏,或移动-受让人所有元素a从元素b

据我了解,移动一个对象伴随着期望被移动的对象(源对象?)将处于有效但未定义的状态。 因此,我认为不能满足条件a == b

我在这里缺少什么?

cppreference 页面是从标准中删节和改编的,以提高可读性。 在这种情况下,它过度简化了要求,这些要求必须区分不同的值类别(正如您正确推理的那样)。 或者,两个单独的分配案例(在标准的表格中没有连续出现)可能被意外合并。 无论哪种方式, cppreference 目前都是错误的。

这是(当前草案)标准所说的:

http://eel.is/c++draft/containers#container.requirements.general-4

对于移动分配:

表达式: a = rv (其中rv是非常量右值)
返回类型: X&
操作语义:现有的所有元素a都上移分配或销毁
确保: a等于rv在此赋值之前的值
复杂度:线性

对于复制分配:

表达式: r = a
返回类型: X&
确保: r == a
复杂度:线性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM