簡體   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