首頁 >後端開發 >C++ >移出向量何時不為空?

移出向量何時不為空?

Susan Sarandon
Susan Sarandon原創
2024-12-01 11:17:141002瀏覽

When Is a Moved-From Vector Not Empty?

移出向量總是空嗎?

問題:

已知標準庫類型的物件可以從中移出,而移動操作可能會將移出的物件保留在未指定的位置狀態,沒有明確的要求將向量排除在外。但是,移出向量怎麼可能處於非空狀態呢?

答案:

一般來說,移出向量將為空,但情況並非總是如此。

具體案例:

移出向量的行為取決於所使用的操作(移動構造函數或移動賦值)以及與向量相關的分配器。

移動建構子:

向量(向量&& v)

在這種情況下,移出向量將始終為空。移動操作需要恆定的複雜性,需要將所有權從一個向量轉移到另一個向量,使前一個向量為空。

移動賦值:

vector& 運算子=(vector&& v)

有三種情況考量:

  1. 啟用分配器傳播:移出的向量將永遠為空。
  2. 停用分配器傳播和相等分配器:此行為與第一個場景類似,保留移出向量空。
  3. 分配器傳播禁用和不同的分配器:移出的向量可能會保留其元素。移動賦值操作被迫使用單獨的移動操作來傳輸元素,可能使原始元素完好無損。

應該注意的是,某些實作可能會選擇明確清除此中的移出向量場景,但這不是必需的。

以上是移出向量何時不為空?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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