C 類返回值的處理及優化

2021-10-05 16:40:27 字數 2069 閱讀 5227

1、實參傳形參是初始化的過程。

2、在c++中如果有類,返回值的方式是無論幾個位元組都是由臨時物件帶回。

返回值返回的是乙個類型別的物件,不可以由暫存器帶回。

原因是:

物件生成呼叫建構函式,建構函式中有個this指標,那就相當於給物件的位址空間取位址,但暫存器是無法取位址的,所以由臨時物件帶回。

3、**說明

class

test

//建構函式

test

(int a,

int b)

//拷貝建構函式

test

(const test& rhs)

//賦值運算子過載函式

test&

operator=(

const test& rhs)

return

*this;}

//析構函式

~test()

private

:int _a;

int _b;};

//類返回值

test getobject

(test lhs)

intmain()

執行結果:

(1)我們看類返回值中的語句return tmp;return返回的是乙個臨時變數,臨時變數中儲存的是tmp 區域性物件的值,臨時物件生成時相當於用乙個已存在的物件生成乙個新物件,就相當於呼叫了拷貝建構函式。

(2)優化一:

實參傳形參時用引用,這樣就會少去對 lhs 物件的生成。也會少去拷貝建構函式的呼叫。

所以在使用自定義型別時,建議形參用引用

test getobject

(test& lhs)

intmain()

執行結果:

(3)優化二:

test getobject

(test& lhs)

intmain()

我們先來梳理一下整個過程:

main()實現中:

1、test test1(40, 20);//呼叫建構函式生成test1物件

2、test rt = getobject(test1);//呼叫預設的建構函式生成rt物件

3、rt = getobject(test1);// 實參傳形參的過程

類返回值函式中:

4、test getobject(test& lhs)//形參是引用,不會生成新的物件

5、test tmp;//tmp物件的生成

6、return test(tmp);//自己寫的test(tmp)為顯示生成臨時物件,作為返回值,系統又以test(test(tmp));的形式生成乙個臨時物件

總結:

1、return之前生成的臨時物件tmp是為了生成return之後的臨時物件,所以就優化掉return之後返回的值的臨時物件。

2、返回值的臨時物件又是用來生成 rt 接收返回值的物件,所以也優化掉。

執行結果:

C 返回值優化

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

返回值優化

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