gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:06 28 4
gpt4 key购买 nike

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

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

destroys or move-assigns all elements of a from elements of b

据我了解,移动对象的前提是被移动的对象(源对象?)将处于有效但未定义的状态。因此,在我看来,条件a == b是不能满足的。

我在这里错过了什么?

最佳答案

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

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

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

对于移动赋值:

Expression: a = rv (where rv is a non-const rvalue)
Return type: X&
Operational Semantics: All existing elements of a are either move assigned to or destroyed
Ensures: a is equal to the value that rv had before this assignment
Complexity: linear

对于复制分配:

Expression: r = a
Return type: X&
Ensures: r == a
Complexity: linear

关于C++ STL 容器要求——后置条件混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57790017/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com