重用移動的容器:探索C 0x 標準草稿
當前的問題旨在闡明重用移動的容器的正確方法在C .根據C 0x 標準草案,處於「有效但未指定狀態」的物件允許不需要前提條件的操作,除非先驗證了所述前提條件。
考慮提供的程式碼片段:
std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize
向量容器被移到container2,使容器處於未指定狀態。根據標準,該狀態允許無條件操作。因此,在容器2(版本2)上呼叫clear會將其返回到已知狀態。
或者,使用版本3重新初始化容器也會達到所需的結果。此方法稍微迂迴一些,但允許潛在的最佳化。然而,它也可能導致錯誤。
因此,重複使用已移動容器的正確方法是清除它或重新初始化它。版本 2 是首選,因為它明確地將容器重置為已知狀態,並避免了與版本 3 相關的潛在陷阱。
以上是如何在 C 0x 中安全地重複使用移動的容器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!