返回值優化

2021-06-23 08:46:16 字數 1260 閱讀 6212

返回值優化,是一種屬於編譯器的技術,它通過轉換源**和物件的建立來加快源**的執行速度。

rvo = return value optimization。

class complex//

複數 complex(

const complex&a):real(a.real),imag(a.imag){};

complex

operator = (const complex &a);

~complex();

private

:

double

real;

double

imag;

};

對於執行 a=b+c;

的時候,編譯器在原函式建立乙個臨時變數,作為第三個引數傳給 operator +(),使用引用傳遞,然後再將值賦給 a。

很多的編譯器都實現了這樣的優化,不過在程式編寫的時候需要注意某些細節,才能讓編譯器執行這一技術。如:

//

不能使用rvo

complex operator +(const complex & a, const complex &b)

//能夠使用rvo

complex operator +(const complex & a, const complex &b)

//

不能使用rvo

complex operator +(const complex & a, const complex &b)

//能夠使用rvo

complex operator +(const complex & a, const complex &b)

另外,必須定義拷貝建構函式來「開啟」rvo

另外還有一種是通過 夠著函式實現的,稱 計算性建構函式

//

計算性建構函式

complex operator +(const complex& a, const complex &b)

complex::complex(

const complex &a ,const complex &b):real(a.real +b.real),imag(a.imag +b.imag){}

要點:

1.如果必須按值返回函式,通過rvo可以省去建立和銷毀區域性物件的步驟。

2.rvo 的應用要遵照編譯器的實現而定。

3.通過編寫計算性函式可以更好的使用rvo。

返回值優化

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

返回值優化問題

近來看到小李子寫了篇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...