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

Joe*_*ann 6 c++ containers

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

Methods and operators表在该文档中指出,表达式a = b的后置条件为a == b。我对此深感困惑。如该表达式的表项所示:

销毁或移动-分配a来自的元素b

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

我在这里想念什么?

Max*_*hof 9

cppreference页删节和调整从可读性标准。在这种情况下,它简化了需求,必须区分不同的值类别(按照您的正确推理)。或者,可能是两个偶然的分配案例(在标准表中没有连续出现)被意外合并。无论哪种方式,cppreference当前都是错误的。

以下是(当前草案)标准的内容:

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

对于移动分配:

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

对于副本分配:

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