通過傳值方式返回建立的新物件時,使用一種特殊的語法.
例如在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 建立了區域性物件,有析構函式。這裡感覺有些詭異。於是...