gpt4 book ai didi

c++ - 在 MoveAssignable 的情况下,标准对 self 移动赋值有何看法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:16 26 4
gpt4 key购买 nike

这是 C++17 的 current description MoveAssignable 的:

t = rv;

If t and rv do not refer to the same object, t is equivalent to the value of rv before the assignment rv's state is unspecified. [ Note: rv must still meet the requirements of the library component that is using it, whether or not t and rv refer to the same object. The operations listed in those requirements must work as specified whether rv has been moved from or not. — end note ]

“rv 仍必须满足正在使用它的库组件的要求”指的是什么?

如果 trv 指的是同一个对象怎么办?在这种情况下,具有 MoveAssignable 的类型可以/应该做什么?

描述的意思是:

  1. 库根本不会用 self 调用移动赋值,所以在这种情况下类型可以做任何它想做的事(甚至崩溃)

  2. 或者类型应该以某种方式处理这种情况(不允许崩溃),但它的结果并不重要

  3. 还是别的?

注意:这里有类似的问题,但有冲突/旧的(C++14 有不同的规则)答案、评论,所以我想澄清一下。

最佳答案

What does "rv must still meet the requirements of the library component that is using it" refer to?

这是一种迂回的说法,即即使 rv 的状态未指定,它也必须是一个有效状态。例如,记录“我走了!”的类型。如果赋值是需要支持的操作之一,则不允许为后续的重新赋值声明和抛出异常。

What if t & rv refer to the same object?

您已经引用了答案:“rv 的状态未指定。”这与 t 是否指代同一对象无关。

Does the description mean:

  1. or the type should handle this case somehow (no crashing allowed), but its result doesn't matter

是的,这个,差不多。

关于c++ - 在 MoveAssignable 的情况下,标准对 self 移动赋值有何看法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47296498/

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