我目前正在考虑实现一个自定义容器,该容器需要与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
复杂度:线性