c++ copy elision,RVO, 省略不必要的構造和析構, std::move
阿新 • • 發佈:2019-02-20
以前c++11 提供了std::move,也就是強行轉換到右值,配合移動構造,移動賦值,在實現中將右值的資料竊取過來,並將右值的狀態設定好,即可減少許多不必要的操作。
今天查c++11/14/17標準的時候看到了 copy elision 這個東西,也就是說不用上面那一套,直接寫成最簡便的形式,編譯器會幫我們達到最優的方式。
看到了許多以前的討論,編譯器到底能否實現這個還是需要實踐上去確認的。
也看到c++11 說到了copy elision
又看到c++17似乎將這個列到了標準裡面,不知道以後是不是就可以放心大膽的靠編譯器了。
(c++17從標準上保證某些情況下的copy elision,
https://en.wikipedia.org/wiki/C%2B%2B17,
標準文件還沒去找)
當然,寫成類似下面這樣總是沒錯
void foo( MyClass& mc);
這種,直接在其他地方完全控制生命期,函式裡面操作物件即可,不用操心返回什麼的
附上一些資料,多是講過去的情況。。
知乎大神 藍色 的日誌
https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/RVO_V_S_std_move?lang=en
https://www.zhihu.com/question/29511959/answer/44617879