• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-60  評論-111  文章-0  trackbacks-0
            只知道 一個(gè)函數(shù) 如果返回值是一個(gè)對象的話 肯定是要涉及到copy construct的 還會構(gòu)造臨時(shí)對象 那如果返回的是引用呢?
            帶著n多的疑問?寫了下面的代碼 來解惑

            ?1#include?<iostream>
            ?2
            ?3class?TestClass
            ?4{
            ?5private:
            ?6????static?int?cnt;
            ?7????int?idx;
            ?8????int?age;
            ?9public:
            10????int?GetAge(){return?age;}
            11????TestClass(int?n)
            12????{
            13????????idx=cnt;
            14????????cnt++;
            15
            16????????age=n;
            17????????std::cout<<idx<<"?TestClass(int?n)"<<std::endl;
            18????}

            19????TestClass()
            20????{
            21????????idx=cnt;
            22????????cnt++;
            23
            24????????age=-1;
            25????????std::cout<<idx<<"?TestClass()"<<std::endl;
            26????}

            27????TestClass(const?TestClass&?v)
            28????{
            29????????idx=cnt;
            30????????cnt++;
            31
            32????????age=v.age;
            33????????std::cout<<idx<<"?TestClass(const?TestClass&?v)"<<std::endl;
            34????}

            35????~TestClass()
            36????{
            37????????std::cout<<idx<<"?~TestClass()"<<std::endl;
            38????}

            39????const?TestClass&?operator=?(const?TestClass&?v)
            40????{
            41????????age=v.age;
            42????????std::cout<<idx<<"?operator="<<std::endl;
            43????????return?*this;
            44????}

            45}
            ;
            46
            47int?TestClass::cnt=0;
            48
            49TestClass?Get()
            50{
            51????TestClass?l(1);
            52????return?l;
            53}

            54
            55TestClass?Get2()
            56{
            57????return?TestClass(2);
            58}

            59
            60TestClass&?Get3()
            61{
            62????TestClass?l(3);
            63????return?l;
            64}

            65
            66TestClass&?Get4()
            67{
            68????return?TestClass(4);
            69}

            70
            71void?test(void)
            72{
            73????TestClass?t;
            74????std::cout<<"\t0"<<"\tAge="<<t.GetAge()<<std::endl;
            75????t=Get();
            76????std::cout<<"\t1"<<"\tAge="<<t.GetAge()<<std::endl;
            77????t=Get2();
            78????std::cout<<"\t2"<<"\tAge="<<t.GetAge()<<std::endl;
            79????t=Get3();
            80????std::cout<<"\t3"<<"\tAge="<<t.GetAge()<<std::endl;
            81????t=Get4();
            82????std::cout<<"\t4"<<"\tAge="<<t.GetAge()<<std::endl;
            83}

            84
            85int?main(int?argc,?char*?argv[])
            86{
            87????test();
            88????system("pause");
            89????return?0;
            90}

            91

            代碼輸出是這樣的


            顯然Get3&Get4是不能得到正確的結(jié)果的,因?yàn)楹瘮?shù)返回時(shí),局部對象的生存期就結(jié)束了,是對象的話就被解構(gòu)了,所以返回的引用也不能對應(yīng)正確的對象

            Get2比Get少構(gòu)造一個(gè)對象,當(dāng)計(jì)算不是很復(fù)雜時(shí)Get2顯然是最高效滴
            posted on 2006-09-05 03:08 shaker(太子) 閱讀(583) 評論(3)  編輯 收藏 引用 所屬分類: C++

            評論:
            # re: 函數(shù)返回對象各種方法,怎樣才是最高效? 2006-09-05 17:50 | chenger
            現(xiàn)在的編譯器都實(shí)現(xiàn)了返回值優(yōu)化,一定程度上能減少拷貝次數(shù)  回復(fù)  更多評論
              
            # re: 函數(shù)返回對象各種方法,怎樣才是最高效? 2006-09-05 17:54 | 周星星
            “ 一個(gè)函數(shù) 如果返回值是一個(gè)對象的話 肯定是要涉及到copy construct的 還會構(gòu)造臨時(shí)對象”
            ------ 在google上搜索一下 rvo 和 nrvo,或者直接看C++標(biāo)準(zhǔn)文檔,不過那花費(fèi)時(shí)間:)  回復(fù)  更多評論
              
            # re: 函數(shù)返回對象各種方法,怎樣才是最高效? 2006-09-06 03:24 | shaker
            謝謝指點(diǎn)  回復(fù)  更多評論
              
            97久久综合精品久久久综合| 中文字幕成人精品久久不卡| 久久99国产综合精品女同| 成人国内精品久久久久一区| 久久综合九色综合欧美就去吻| 中文字幕久久久久人妻| 91精品国产91热久久久久福利 | 久久久无码精品亚洲日韩蜜臀浪潮| 久久综合香蕉国产蜜臀AV| 久久国产精品波多野结衣AV| 人妻精品久久无码专区精东影业 | 久久国产亚洲精品| 青青国产成人久久91网 | 欧美国产精品久久高清| 久久精品亚洲中文字幕无码麻豆| 国产一区二区三精品久久久无广告| 一本久久知道综合久久| 少妇久久久久久被弄到高潮| 欧美久久综合性欧美| 久久久久久久久久久久中文字幕 | 狠狠色婷婷久久一区二区三区| 久久久精品人妻无码专区不卡| 精品久久久无码人妻中文字幕豆芽 | 精品久久人人爽天天玩人人妻| 国产成人精品三上悠亚久久| 美女久久久久久| 久久亚洲高清综合| 精品久久久久久无码免费| 日韩精品国产自在久久现线拍| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 久久精品国产黑森林| 伊人久久免费视频| 久久亚洲综合色一区二区三区| 99精品国产在热久久无毒不卡| AV无码久久久久不卡蜜桃| 久久夜色精品国产欧美乱| 77777亚洲午夜久久多喷| 久久99精品国产麻豆宅宅| 欧美亚洲国产精品久久| 久久综合偷偷噜噜噜色| 伊人久久大香线蕉av不变影院|