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

            const 引用是指向const 對象的引用

            const int ival=1024;
            const int &refVal=ival; //ok,both reference and object are const
            int  &ref2=ival;        //error! non const reference to a const object
            可以讀取但不能修改refVal,因此,任何對refVal的賦值都是不合法的。這個限制有其意義:不能直接對ival同值,因此不能通過使用refVal來修改ival。
            同理,用ival初始化ref2也是不合法的:ref2是普通的非const引用,因此可以用來修改ref2 指向的對象的值。能過ref2對ival賦值會導(dǎo)致修改const對象的值。為阻止這樣的修改,需要規(guī)定將普通的引用綁定到const對象是不合法的。

            const 引用可以初始化為不同類型的對象或者初始化為右值,如字面值常量:
            int i=42;
            // legal for const reference ONLY!
            const int &r=42;
            const int &r2=r+i;

            double dval=3.14;
            const int &r3=dval;
            編譯器展開:
            int temp=dval;
            const int &ri=temp;

            非const引用只能綁定到與該引用同類型的對象。
            const引用則可以綁定到不同但相關(guān)的類型的對象或綁定到右值。

            在C++中真正的臨時對象是看不見的,它們不出現(xiàn)在你的源代碼中。建立一個沒有命名的非堆(non-heap)對象會產(chǎn)生臨時對象。這種未命名的對象通常在兩種條件下產(chǎn)生:為了使函數(shù)成功調(diào)用而進(jìn)行隱式類型轉(zhuǎn)換和函數(shù)返回對象時。理解如何和為什么建立這些臨時對象是很重要的,因為構(gòu)造和釋放它們的開銷對于程序的性能來說有著不可忽視的影響。
            首先考慮為使函數(shù)成功調(diào)用而建立臨時對象這種情況。當(dāng)傳送給函數(shù)的對象類型與參數(shù)類型不匹配時會產(chǎn)生這種情況。

            在字符計數(shù)的例子里,能夠成功傳遞char數(shù)組到countChar中,但是在這里試圖用char數(shù)組調(diào)用upeercasify函數(shù),則不會成功:。考慮一下這個函數(shù):
            void uppercasify(string& str);
            char subtleBookPlug[] = "Effective C++";
            uppercasify(subtleBookPlug); // 錯誤!
            沒有為使調(diào)用成功而建立臨時對象,為什么呢?
            假設(shè)建立一個臨時對象,那么臨時對象將被傳遞到upeercasify中,其會修改這個臨時對象,把它的字符改成大寫。但是對subtleBookPlug函數(shù)調(diào)用的真正參數(shù)沒有任何影響;僅僅改變了臨時從subtleBookPlug生成的string對象。無疑這不是程序員所希望的。程序員傳遞subtleBookPlug參數(shù)到uppercasify函數(shù)中,期望修改subtleBookPlug的值。當(dāng)程序員期望修改非臨時對象時,對非常量引用(references-to-non-const)進(jìn)行的隱式類型轉(zhuǎn)換卻修改臨時對象。這就是為什么C++語言禁止為非常量引用(reference-to-non-const)產(chǎn)生臨時對象。這樣非常量引用(reference-to-non-const)參數(shù)就不會遇到這種問題。

            把一個const對象的地址賦給一個普通的,非const對象的指針也會導(dǎo)致編譯時錯誤
            const double pi=3.14;
            double *ptr=&pi;   //error:ptr is a plain pointer
            const double *cptr=&pi;  //ok:cptr is a pointer to const

            不能使用void*指針保存const 對象的地址,而必須用const void*類型的指針保存。
            const int universe=42;
            const void *cpv=&universe; //ok;
            void *pv=&universe;      //error:universe is const

            允許把非const 對象的地址賦給指向const 對象的指針
            double dval=3.14;
            cptr=&dval;

            typedef string *pstring;
            const pstring cstr;
            //cstr is a const pointer to string
            string *const cstr  ; // equivalent to const pstring cstr;


            Sales_item成員函數(shù)形參表后面的const后面所起的作用:const 改變了隱含的this 形參的類型。在調(diào)用
            total.same_isbn(trans)時,隱含的this形參將是一個指向total對象的const Sales_item *類型的指針。
            由于this 是指向const對象的指針,const 成員函數(shù)不能修改調(diào)用該函數(shù)的對象。
            const 對象,指向const對象的指針或引用只能用于調(diào)用其const成員函數(shù),如果嘗試用它們調(diào)用非
            const 成員函數(shù)
            ,則是錯誤的。
            posted on 2007-05-14 15:56 清源游民 閱讀(871) 評論(0)  編輯 收藏 引用 所屬分類: C++
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            留言簿(35)

            隨筆分類(78)

            隨筆檔案(74)

            文章檔案(5)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            婷婷综合久久狠狠色99h| 久久九九久精品国产免费直播| 无码伊人66久久大杳蕉网站谷歌| 2021国产精品久久精品| 一本久久a久久精品亚洲| 国产精品一久久香蕉国产线看观看| 国产成人精品白浆久久69| 国产精品99久久精品爆乳| 久久综合视频网| 精品久久无码中文字幕| 久久国产一片免费观看| 亚洲欧美日韩中文久久| 色综合久久88色综合天天| 久久久久青草线蕉综合超碰| 久久66热人妻偷产精品9| 久久精品这里只有精99品| 人妻精品久久无码区| 亚洲人成无码网站久久99热国产| 亚洲国产另类久久久精品黑人| 久久婷婷久久一区二区三区| 久久精品国产日本波多野结衣| 久久91精品国产91久久户| 免费精品久久天干天干| 岛国搬运www久久| 国产精品禁18久久久夂久| 尹人香蕉久久99天天拍| 久久精品国产72国产精福利| 久久综合给合久久狠狠狠97色69| 久久综合一区二区无码| 色综合久久综合网观看| 久久99国产综合精品女同| 亚洲香蕉网久久综合影视| 噜噜噜色噜噜噜久久| 欧美与黑人午夜性猛交久久久| 久久中文字幕一区二区| 99国产精品久久| 99久久无色码中文字幕| 久久av无码专区亚洲av桃花岛| 久久婷婷五月综合国产尤物app| 久久精品久久久久观看99水蜜桃| 久久久久亚洲AV成人网人人网站 |