返回值優化

2021-06-17 17:11:46 字數 612 閱讀 2948

通過傳值方式返回要建立新物件時,應注意使用的形式,例如在operator+:

return integer(left.l / right.l) ;
咋看起來這像是乙個「對乙個建構函式的呼叫」,其實並非如此。這是臨時物件語法,它是在說:「建立乙個臨時integer物件並返回它」。據此我們可能認為如果建立乙個有名字的區域性物件並返回它結果是一樣的。其實不然。如果如許編寫:

integer temp(left.l / right.l) ;

return temp ;

將發生三件事:

(1)、建立temp物件,其中包括建構函式的呼叫

(2)、拷貝建構函式把temp拷貝到外部返回值的儲存單元中

(3)、當temp在作用域的結尾時呼叫析構函式

相反的,「返回臨時物件」的方式完全不同的。當編譯器看到我們這樣做時,它明白對建立的物件沒有其他的需求,只是返回它,所以編譯器直接地把這個物件建立在外部返回值的記憶體單元中。因為不是真正建立乙個區域性物件,所以僅需要乙個普通的構造函式呼叫(不需要拷貝建構函式),且不會呼叫析構函式。這種方法不需要什麼花費,因此效率是非常高的,但程式設計師要理解這些。這種方式常被稱為返回值優化

返回值優化

返回值優化,是一種屬於編譯器的技術,它通過轉換源 和物件的建立來加快源 的執行速度。rvo return value optimization。class complex 複數 complex const complex a real a.real imag a.imag complex opera...

返回值優化問題

近來看到小李子寫了篇blog,題目為返回值優化。文章如下。return integer left.i right.i 建立乙個臨時物件並返回他,不會呼叫析構函式,效率高。interger tmp left.i right.i return tmp 建立了區域性物件,有析構函式。這裡感覺有些詭異。於是...

C 返回值優化

當函式需要返回物件時,通常有兩種寫法,一種是直接在return語句中返回乙個物件,一種是先構造好乙個物件,然後在return中將其返回。以下 為例 include include using namespace std struct node node const node n name n.nam...