重用已移動容器的正確方法是什么?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: Reinitializecontainer.push_back(2);assert(container.size() == 1 && container.front() == 2);根據我在C ++ 0x標準草案中閱讀的內容;ver3似乎是正確的方法,因為移動后的對象位于“除非另有說明,否則將這些移出的對象置于有效但未指定的狀態?!蔽覐奈凑业饺魏巍耙云渌绞街付ā钡膶嵗?。盡管我發現ver3有點round回,并且會更喜歡ver1,但vec3可以允許進行其他一些優化,但另一方面很容易導致錯誤。我的假設正確嗎?
3 回答

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
對象處于有效但未定義的狀態基本上意味著,雖然不能保證對象的確切狀態,但它是有效的,因此只要不依賴這些成員函數(或非成員函數),就可以保證它們正常工作在具有一定狀態的物體上。
所述clear()成員函數對對象,因此可以從移動對象上調用(比它是有效的,當然其他)的狀態沒有先決條件。另一方面,例如front()取決于容器不為空,因此不能被調用,因為不能保證容器為非空。
因此,ver2和ver3都應該很好。
- 3 回答
- 0 關注
- 406 瀏覽
添加回答
舉報
0/150
提交
取消