免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
右值引用

///////////////////////////////////////////////

我的注解

int &f(const int&a)

{

}

那么 f(3)可以.

int &f( int&a)

{

}

f(3)錯(cuò)誤.


函數(shù)調(diào)用時(shí)形參是實(shí)參的拷貝.

同樣考慮返回值.不能返回局部變量,而只能返回到一個(gè)臨時(shí)變量中.

臨時(shí)變量的值可能被丟棄,或者保存到一個(gè)生存期更長(zhǎng)的變量中.


從匯編講.

調(diào)用時(shí)將參數(shù)壓入棧頂,     ========           將實(shí)參拷貝到形參.

返回時(shí)     將返回值放到棧頂   ======          將返回值放到臨時(shí)變量

返回后,棧指針恢復(fù),但棧頂?shù)呐R時(shí)變量仍在, 此時(shí)可將其拷貝到一個(gè)生存期更長(zhǎng)的變量中.


struct o{
    int x;
    int y;
};
o f(){
    int i=0;
    int j=1;
    o o1={30};
    int k=2;
    int l=3;
    return o1;
};
將創(chuàng)建兩個(gè)o對(duì)象.一個(gè)是o1,一個(gè)是在棧頂創(chuàng)建返回的臨時(shí)變量.
s foo(){
    int i=0;
    int j=1;
    int k=2;
    int l=3;
    printf("foo returns\n");
    return o(44,55);
};
將只創(chuàng)建一次o對(duì)象.

o o2=f(); // 調(diào)用f函數(shù),系統(tǒng)會(huì)在運(yùn)行時(shí)棧上開辟一數(shù)據(jù)結(jié)構(gòu)的內(nèi)存(活動(dòng)記錄),同時(shí)指針指向了該活動(dòng)記錄。

該活動(dòng)記錄中存放有函數(shù)返回的地址和返回值、局部變量等數(shù)據(jù)成員。
當(dāng)函數(shù)返回時(shí),系統(tǒng)會(huì)pop該活動(dòng)記錄,但這僅是“邏輯”上的刪除,物理上數(shù)據(jù)還在那,在回到Main數(shù)時(shí),還是可以訪問返回值的。

return value optimization (RVO) 因?yàn)槟阍趓eturn時(shí)才會(huì)創(chuàng)建這個(gè)對(duì)象 那么這個(gè)對(duì)象在這個(gè)函數(shù)體內(nèi)就不會(huì)再被使用了

編譯器可以直接用那個(gè)臨時(shí)變量的空間創(chuàng)建這個(gè)對(duì)象 不需要再額外多創(chuàng)建一份.


Mytime operator *( double i ) const    // 生成臨時(shí)對(duì)象
//編譯器會(huì)產(chǎn)生臨時(shí)對(duì)象,并且調(diào)用拷貝構(gòu)造函數(shù)初始化,執(zhí)行完這個(gè)語(yǔ)句后,臨時(shí)對(duì)象自動(dòng)釋放。
//所以產(chǎn)生臨時(shí)對(duì)象有構(gòu)造和析構(gòu)的時(shí)間開銷。

Mytime& operator *( double i ) const   // 不生成臨時(shí)對(duì)象


一般對(duì)于拷貝構(gòu)造函數(shù),可以想像,不應(yīng)該能修改被拷貝的對(duì)象.因此要求輸入?yún)?shù)是const &,

如果拷貝構(gòu)造函數(shù)的輸入?yún)?shù)是一個(gè)臨時(shí)對(duì)象呢?

如果被拷貝對(duì)象擁有大量資源,那么可見返回的對(duì)象也需要擁有相應(yīng)的資源.

如果被拷貝對(duì)象在被拷貝后,就不存在了,那么它就需要隨后釋放相應(yīng)的資源.

顯然如果能把其擁有的資源直接移動(dòng)交換給返回的拷貝對(duì)象,

而不是一方面對(duì)拷貝對(duì)象重新分配資源,而被拷貝對(duì)象又馬上釋放資源,能大幅提高效率.


那么拷貝構(gòu)造函數(shù)的輸入?yún)?shù)到底能否被修改,與輸入?yún)?shù)是否是臨時(shí)的右值對(duì)象有關(guān).

需要兩種不同的拷貝構(gòu)造函數(shù).

那么可以根據(jù)輸入?yún)?shù)是否是臨時(shí)的右值對(duì)象,進(jìn)行重載處理.

輸入?yún)?shù)是右值引用,表示其是臨時(shí)的右值對(duì)象,可以被修改..

輸入?yún)?shù)是const 左值應(yīng)用,表示其不能被修改.

編譯器根據(jù)輸入?yún)?shù)的類型,選擇合適的函數(shù)調(diào)用.

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++函數(shù)返回結(jié)果為自定義類型
引用參數(shù)與引用返回值,臨時(shí)對(duì)象
C++拷貝構(gòu)造函數(shù)與賦值函數(shù)【整理】
C++拷貝構(gòu)造函數(shù)詳解(轉(zhuǎn))
C++ Primer第六章函數(shù)
C++之引用的詳解
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服