繁体   English   中英

在MoveAssignable的情况下,标准对移动分配给自己有什么看法?

[英]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必须仍然满足使用它的库组件的要求”是指什么?

如果trv引用相同的对象怎么办? 在这种情况下,MoveAssignable可以/应该使用哪种类型?

描述是否意味着:

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

  2. 或者类型应该以某种方式处理这种情况(不允许崩溃),但其结果无关紧要

  3. 或者是其他东西?

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

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

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

如果trv引用相同的对象怎么办?

你已经引用了答案:“ rv的状态没有说明。” 这与t是否指向同一对象无关。

描述是否意味着:

  1. 或者类型应该以某种方式处理这种情况(不允许崩溃),但其结果无关紧要

是的,这个,差不多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM