std::move(x) 函數其實並沒有移動任何實體資料。它本質上是轉換為右值,特別是 x 值。這種轉換可能會導致混亂,因此了解命名約定背後的預期目的非常重要。
移動的原始概念可以追溯到 2002 年的最初移動提案。該提案引入了右值引用並展示瞭如何編寫一個更有效率的 std::swap。當時,與「&&」相關的唯一含義是邏輯性的,因此需要一種更具可讀性的方法來傳達函數的意圖。
開發人員沒有使用「cast_to_rvalue」或類似的名稱,而是使用選擇「移動」來突出顯示轉換的目的:啟用移動語意。這種命名約定有助於闡明程式碼的意圖,而無需深入了解值類別的技術細節。
今天,熟練的 C 程式設計師應該意識到 std::move 本質上是一個強制轉換,而初學者程式設計師可以理解它目的是從來源中移動而不是從來源複製。如果需要,其他開發人員可以使用不同的名稱來實現類似的功能,這表示 std::move 並沒有壟斷該功能。
就產生的目標碼而言,std::move 對平凡沒有影響可移動的物體。但是,對於具有自訂移動賦值運算子的對象,std::move 可以影響呼叫哪個重載,從而可能提高效能。
總體而言,將 std::move 命名為「move」具有教學意義目的,強調功能的意圖而不是其技術實現。
以上是儘管實際上沒有移動數據,為什麼 std::move 被命名為 std::move ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!