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