亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重用已移動的容器?

重用已移動的容器?

C++
偶然的你 2019-10-19 16:24:26
重用已移動容器的正確方法是什么?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都應該很好。


查看完整回答
反對 回復 2019-10-19
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

我認為您不能對移出的對象做任何事情(除了銷毀它)。


您不能使用它swap來獲得移動的所有優勢,但將容器保持在已知狀態嗎?


查看完整回答
反對 回復 2019-10-19
  • 3 回答
  • 0 關注
  • 406 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號