[英]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.