首頁 >後端開發 >C++ >為什麼早期 C 11 草案中沒有預設移動實作?

為什麼早期 C 11 草案中沒有預設移動實作?

Barbara Streisand
Barbara Streisand原創
2024-11-19 19:13:02276瀏覽

Why Were Default Move Implementations Absent in Early C  11 Drafts?

為什麼早期 C 11 草稿中沒有預設移動實作?

在 C 11 標準的早期版本中,移動建構子和賦值運算子的隱式產生是辯論的話題。這導致後續草案發生變化,導致目前可用的編譯器出現以下行為:

隱式移動語義

自11 月發布C 標準(N3225) 以來,隱式移動構造函數和賦值運算子可以在以下條件下產生:

  • 該類別沒有使用者宣告的副本建構子。
  • 該類別沒有使用者宣告的複製賦值運算子。
  • 該類別沒有使用者宣告的移動賦值運算子。
  • 該類別沒有使用者宣告的析構函式.
  • 移動建構子不會隱式定義為已刪除。

解釋早期草稿中的缺失

在早期草稿中不包含默認移動構造函數/賦值實現的決定是出於對潛在混亂和意外行為的擔憂的結果。但是,後續修訂透過收緊隱式移動產生的條件解決了這些問題。

解決方法

如果您正在尋找一種在不編寫顯式移動構造函數/賦值運算符的情況下利用移動語義的方法,您可以使用[GManNickG的宏]( https://stackoverflow.com/a/12316884/8674521)。該巨集為您的類別產生必要的移動語義。

透過實作移動語意,您也可以選擇不提供交換成員函數。

以上是為什麼早期 C 11 草案中沒有預設移動實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn