C++返回值优化
返回值優化
- 首先我們先來看一道題,下面的代碼運行之后會輸出什么結果?
- 返回值優化
首先我們先來看一道題,下面的代碼運行之后會輸出什么結果?
我想大多數人會選A,對嗎?因為foo函數在返回C類的對象時會調用拷貝構造函數來創建一個臨時對象。
現在讓我們編譯并運行這個程序,看看輸出結果是否如我們所料
$ clang++ -std=c++11 foo.cpp
$ ./a.out
ConstructorDestructor然而,遺憾的是,事實與課本里說的并不一樣,那么,為什么會這樣呢?從實際編譯運行的輸出來看,C類的拷貝構造函數并沒有被調用。
這是因為在實際工程中大多數時候C++構造對象的開銷巨大,編譯器為了生成高效的代碼,在foo函數返回時并沒有調用拷貝構造函
總結