返回值優化 《C Primer Plus》

2021-10-01 04:22:40 字數 570 閱讀 2091

通過傳值方式返回建立的新物件時,使用一種特殊的語法.

例如在operator+中:return integer(left.i + right.i);

這種形式看起來像是乙個建構函式的呼叫,這稱為臨時物件語法,含義是建立乙個臨時的integer物件並返回它。

這種方式和建立乙個有名字的物件並返回它是否相同呢?

例如:integer temp(left.i + right.i); return temp;

這兩條語句先建立temp物件,會呼叫建構函式。然後拷貝建構函式把temp拷貝到外部返回值的儲存單元,最後在temp作用域的結尾時呼叫析構函式。

返回臨時物件的方式不同與此:

當編譯器看到這種語法時,會明白建立這個物件的目的只是返回它,所以編譯器直接把這個物件建立在外部返回值的儲存單元中,所以只需要呼叫一次建構函式,不需要拷貝建構函式和析構函式的呼叫。因此,使用臨時物件語法的效率非常高,這被稱為返回值優化

返回值優化

通過傳值方式返回要建立新物件時,應注意使用的形式,例如在operator return integer left.l right.l 咋看起來這像是乙個 對乙個建構函式的呼叫 其實並非如此。這是臨時物件語法,它是在說 建立乙個臨時integer物件並返回它 據此我們可能認為如果建立乙個有名字的區域性...

返回值優化

返回值優化,是一種屬於編譯器的技術,它通過轉換源 和物件的建立來加快源 的執行速度。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 建立了區域性物件,有析構函式。這裡感覺有些詭異。於是...