與它的名字相反,std::move 並沒有物理上移動任何東西;它只是移動任何東西。相反,它將物件轉換為右值引用,或更具體地說,轉換為 xvalue。將函數命名為 move 的決定並不是為了欺騙或混淆,而是為了讓程式碼更具可讀性。
在右值引用的早期階段,std::swap 函數需要針對效能進行最佳化。原始方法使用明確 static_cast
透過引入 std::move,明確強制轉換被替換為強調程式碼意圖的語法糖:啟用移動語意。解釋精確的技術細節,例如“強制轉換為右值”,會引發額外的問題,從而模糊要點。
std:: 的歷史move 可以追溯到 2002 年關於右值引用的提案。 move 函數最初是作為 static_cast
隨著 C 語言的發展,右值的概念被細化為我們今天所知的值類別。使用不同的名稱(例如cast_to_xvalue)來更準確地描述操作可能會妨礙可讀性。
從本質上講,std::move 只是簡單地轉換一個物件到 x 值。這種轉換對普通可移動對象沒有影響,並且對於具有移動賦值運算符的對象,它確保調用移動賦值運算符而不是複製賦值運算符。
就產生的物件程式碼而言,std:: move 對於一般可移動的物體沒有影響。對於具有移動賦值運算子的對象,它可能會改變重載決策。然而,在運行時,std::move 實際上消失了,它唯一的影響是在編譯時。
以上是如果 `std::move` 不移動任何東西,為什麼它被稱為 `std::move`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!