[英]What does the standard say about move-assignment to self in the case of MoveAssignable?
这是C ++ 17 目前对MoveAssignable的描述 :
t = rv;
如果t和rv没有引用同一个对象,则t在赋值rv的状态未指定之前等效于rv的值。 [注意:rv必须仍然满足使用它的库组件的要求,无论t和rv是否引用同一个对象。 无论rv是否已移动,这些要求中列出的操作必须按指定的方式工作。 - 结束说明]
“rv必须仍然满足使用它的库组件的要求”是指什么?
如果t
& rv
引用相同的对象怎么办? 在这种情况下,MoveAssignable可以/应该使用哪种类型?
描述是否意味着:
库根本不会调用自己的移动赋值,因此在这种情况下类型可以做任何想做的事情(甚至崩溃)
或者类型应该以某种方式处理这种情况(不允许崩溃),但其结果无关紧要
或者是其他东西?
注意:这里有类似的问题在SO,但有冲突/旧(C ++ 14有不同的规则)答案,评论,所以我想澄清这一点。
“rv必须仍然满足使用它的库组件的要求”是指什么?
这是一种迂回的说法,即使rv的状态未指定,它也必须是有效的状态。 例如,一种记录“我走了!”的类型。 如果赋值是需要支持的操作之一,则不允许状态和抛出后续重新分配的异常。
如果
t
&rv
引用相同的对象怎么办?
你已经引用了答案:“ rv
的状态没有说明。” 这与t
是否指向同一对象无关。
描述是否意味着:
- 或者类型应该以某种方式处理这种情况(不允许崩溃),但其结果无关紧要
是的,这个,差不多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.