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

            Error

            #Error

            const

            首先說(shuō)明一下使用const的好處:
            使用const的好處在于它允許指定一種語(yǔ)意上的約束------某種對(duì)象不能被修改--------編譯器具體來(lái)實(shí)
            施這種約束。通過(guò)const,你可以通知編譯器和其他程序員某個(gè)值要保持不變。只要是這種情況,你就要
            明確地使用const ,因?yàn)檫@樣做就可以借助編譯器的幫助確保這種約束不被破壞。
            (一)
            首先解釋一下const與指針的關(guān)系:
            const在指針的聲明中有一下三種形式:
            const char *p        = "hello";          // 非const指針,
                                                     // const數(shù)據(jù),就是說(shuō)p指向的那個(gè)內(nèi)存空間的數(shù)據(jù)是不可
            變的,但p還可以指向新的內(nèi)存地址。
            char * const p       = "hello";          // const指針,
                                                     // 非const數(shù)據(jù),就是說(shuō)這個(gè)指針p一旦賦值或初始化,就
            不能在指向其他位置了,但其指向的位置的數(shù)據(jù)值是可變的。
            const char * const p = "hello";          // const指針,
                                                     // const數(shù)據(jù),這個(gè)就很明顯了,集上述兩家之長(zhǎng)處(也
            可能是短處哦,),上述兩者都不可變。
            一般來(lái)說(shuō),你可以在頭腦里畫(huà)一條垂直線穿過(guò)指針聲明中的星號(hào)(*)位置,如果const出現(xiàn)在線的左邊,
            指針指向的數(shù)據(jù)為常量;如果const出現(xiàn)在線的右邊,指針本身為常量;如果const在線的兩邊都出現(xiàn),二
            者都是常量。
            恩,差點(diǎn)忘了,還有一種形式:
            char const * p = "hello"; 
            這其實(shí)與上邊的情形一是一樣的,只是由于個(gè)人習(xí)慣的不同,二者都是對(duì)的。
            (二)
            在一個(gè)函數(shù)聲明中,const可以指的是函數(shù)的返回值,或某個(gè)參數(shù);對(duì)于成員函數(shù),還可以指的是整個(gè)函
            數(shù)。
            const(1) int fun(int  const(2)& )const(3)
            {
                   int temp;
                   retrun temp;
            }
            參數(shù)的 const屬性(上例2處)一般用引用傳遞,是為了保證該參數(shù)在函數(shù)中不允許被修改,一旦修改,
            編譯器會(huì)報(bào)錯(cuò)。
            而返回值的const屬性(上例1處)是保證函數(shù)的返回值不被修改,也許你會(huì)質(zhì)疑這種可能性,但是這種可
            能性確實(shí)存在,
            詳細(xì)情形如下:(摘自effective c++)
            const rational operator*(const rational& lhs,
                                     const rational& rhs);
            很多程序員第一眼看到它會(huì)納悶:為什么operator*的返回結(jié)果是一個(gè)const對(duì)象?因?yàn)槿绻皇沁@樣,用
            戶就可以做下面這樣的壞事:
            rational a, b, c;
            ...
            (a * b) = c;      // 對(duì)a*b的結(jié)果賦值
            我不知道為什么有些程序員會(huì)想到對(duì)兩個(gè)數(shù)的運(yùn)算結(jié)果直接賦值,但我卻知道:如果a,b和c是固定類型
            ,這樣做顯然是不合法的。一個(gè)好的用戶自定義類型的特征是,它會(huì)避免那種沒(méi)道理的與固定類型不兼容
            的行為。對(duì)我來(lái)說(shuō),對(duì)兩個(gè)數(shù)的運(yùn)算結(jié)果賦值是非常沒(méi)道理的。聲明operator*的返回值為const可以防止
            這種情況,所以這樣做才是正確的。
            呵呵,象Scott Meyers這樣的大師見(jiàn)地就是不一般吧
            接下來(lái)說(shuō)明函數(shù)的const屬性:(上例3處)
            當(dāng)然嘍,一般用于成員函數(shù)了,它有以下屬性:
            (1)const成員函數(shù)不被允許修改它所在對(duì)象的任何一個(gè)數(shù)據(jù)成員。
            (2)const成員函數(shù)能夠訪問(wèn)對(duì)象的const成員,而其他成員函數(shù)不可以。
            (三)盡量使用 const代替define 吧,因?yàn)閏onst是類型安全的。
            應(yīng)該使用
            const double  pi = 3.1415926;
            而不要用#define pi 3.1415926
            后者是宏,僅僅是對(duì)程序中的pi用3.1415926代替,會(huì)讓你對(duì)于一些編譯時(shí)的錯(cuò)誤很難定位。

            posted on 2011-12-07 19:58 Error 閱讀(303) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++

            久久亚洲精品中文字幕三区| 久久国产视屏| 日韩欧美亚洲国产精品字幕久久久| 色欲av伊人久久大香线蕉影院 | 久久人爽人人爽人人片AV| 久久这里只有精品视频99| 日韩欧美亚洲综合久久影院d3| 久久丫精品国产亚洲av不卡 | 久久久久亚洲AV片无码下载蜜桃| 久久露脸国产精品| 欧美精品丝袜久久久中文字幕| 精品九九久久国内精品| A级毛片无码久久精品免费| 青青草国产精品久久久久| 丁香五月综合久久激情| 久久久久国产日韩精品网站| 久久免费视频一区| 久久只这里是精品66| 99久久夜色精品国产网站| 久久精品国产男包| 久久99国产综合精品免费| 9久久9久久精品| 久久国产视屏| 97精品依人久久久大香线蕉97| 久久久久亚洲精品天堂| 四虎国产永久免费久久| 久久精品国产亚洲av瑜伽| 久久久亚洲精品蜜桃臀| 久久婷婷五月综合成人D啪| 久久天天躁狠狠躁夜夜96流白浆| 国产精品久久久久久| 亚洲AⅤ优女AV综合久久久| 亚洲国产精品成人久久| 91精品婷婷国产综合久久| 久久精品国产免费观看| 国产三级精品久久| 久久亚洲AV成人出白浆无码国产| 久久久久黑人强伦姧人妻| 日本欧美久久久久免费播放网| 久久精品国产亚洲Aⅴ香蕉| 久久99国产精品尤物|