1. 程式人生 > >c++ copy elision,RVO, 省略不必要的構造和析構, std::move

c++ copy elision,RVO, 省略不必要的構造和析構, std::move

以前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,

標準文件還沒去找)

而且只能選擇一種,不能又想用move又想用copy elision,詳見下面藍色大神的日誌

當然,寫成類似下面這樣總是沒錯

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