首頁 > 後端開發 > C++ > 主體

如果 `std::move` 不移動任何東西,為什麼它被稱為 `std::move`?

Mary-Kate Olsen
發布: 2024-11-20 04:40:02
原創
877 人瀏覽過

Why is `std::move` Called `std::move` if it Doesn't Move Anything?

為什麼 std::move 命名為 std::move?

與它的名字相反,std::move 並沒有物理上移動任何東西;它只是移動任何東西。相反,它將物件轉換為右值引用,或更具體地說,轉換為 xvalue。將函數命名為 move 的決定並不是為了欺騙或混淆,而是為了讓程式碼更具可讀性。

在右值引用的早期階段,std::swap 函數需要針對效能進行最佳化。原始方法使用明確 static_cast表達式,這掩蓋了程式碼的根本目的。

透過引入 std::move,明確強制轉換被替換為強調程式碼意圖的語法糖:啟用移動語意。解釋精確的技術細節,例如“強制轉換為右值”,會引發額外的問題,從而模糊要點。

std::move 的歷史

std:: 的歷史move 可以追溯到 2002 年關於右值引用的提案。 move 函數最初是作為 static_cast 的語法糖引入的,當時很少有程式設計師完全理解右邊值和移動語意之間的聯繫。

隨著 C 語言的發展,右值的概念被細化為我們今天所知的值類別。使用不同的名稱(例如cast_to_xvalue)來更準確地描述操作可能會妨礙可讀性。

std::move 的作用

從本質上講,std::move 只是簡單地轉換一個物件到 x 值。這種轉換對普通可移動對象沒有影響,並且對於具有移動賦值運算符的對象,它確保調用移動賦值運算符而不是複製賦值運算符。

就產生的物件程式碼而言,std:: move 對於一般可移動的物體沒有影響。對於具有移動賦值運算子的對象,它可能會改變重載決策。然而,在運行時,std::move 實際上消失了,它唯一的影響是在編譯時。

以上是如果 `std::move` 不移動任何東西,為什麼它被稱為 `std::move`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板