在引用和返回值優化間徘徊

2021-05-23 06:13:21 字數 429 閱讀 7109

c++中 大多人認為在呼叫返回乙個物件的函式時候,這樣的**是不夠高效的:

簡單**(1)如下:

所以在實際的專案中,我們時常選擇使用引用來避免多於的臨時物件的構造和析構。

簡單**(2)如下:

然而閒暇之餘,我們從彙編層級來比較兩者,又會陷入尷尬的地步:

簡單**(1)生成的彙編為:

而所謂的高效** 簡單**(2)生成的彙編為:

居然比非引用的多了兩行,這兩行指標的操作實際上是引用變數造成的,這也說明了引用本質上就是指標的規範化操作。

雖然這兩行**只是乙個簡單的指標操作,但是在返回的類物件很小的時候(乙個指標大小),那麼這兩行所造成的效率損失比率就客觀了。於是開始迷茫了,在實際的**中我們應該怎麼選擇呢,在編譯器沒有做返回值優化的時候,顯然**2是絕對高效的,但是在有返回值優化的時候**1確是那麼的**。。。   

返回值優化

通過傳值方式返回要建立新物件時,應注意使用的形式,例如在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...

引用 引用型返回值

值形式的函式返回值通常都具有右值屬性,即在函式的呼叫者空間根據函式的返回型別建立乙個匿名物件,負責接收該函式的返回值 用於接收函式返回值的匿名物件和表示式的值類似,通常只具有語句級生命期且唯讀,即所謂將亡右值 如果函式返回的是乙個引用,那麼用於接收該返回值的就不再是乙個匿名的將亡右值物件,而是乙個引...