對移出物件允許哪些操作?
C 標準定義了已移出物件的行為。這些知識對於理解某些函數(例如 std::swap)如何運作至關重要。
標準定義
依標準(第 17.6.5.15 節), C標準庫類型中的物件可以被移動並隨後放置在「有效但未指定的狀態。」
操作的含義
當物件處於未指定狀態時,您可以執行任何沒有前提條件的操作。無前提操作包括:
但是,操作有先決條件的通常不能在沒有進一步檢查的情況下執行。例如:
範例:std::swap
d: : swap 函數,如原始問題所示,需要指派給移出的物件。這是可能的,因為賦值是無前提操作。附加說明:T c = std::move(a) 與T c(std::move(a))
在std::swap 實作中,使用直接移動賦值T c = std::move(a) 而不是複製建構子T c(std::move(a))。這樣做是為了避免不必要的 a 副本,這會導致效能損失。以上是您可以用 C 中的移出物件做什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!