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