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...