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

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

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

            97精品国产91久久久久久| 久久人人爽人人爽人人片AV不 | 久久九九精品99国产精品| 久久人人爽爽爽人久久久| 国产视频久久| 国产激情久久久久久熟女老人| 男女久久久国产一区二区三区 | AV色综合久久天堂AV色综合在 | 久久人人爽人人爽人人片AV麻烦| 99久久成人国产精品免费 | 国产精品日韩深夜福利久久| 无码人妻久久一区二区三区蜜桃 | 国产精品美女久久久久av爽| 99久久香蕉国产线看观香| 丁香五月网久久综合| 日韩人妻无码精品久久久不卡| 久久99精品久久久久久不卡 | 国产成人精品久久| 欧美久久综合九色综合| 国产激情久久久久影院老熟女免费| 久久久久久久久波多野高潮| 久久久久国产亚洲AV麻豆| 国产精品天天影视久久综合网| 伊人久久无码中文字幕| 亚洲美日韩Av中文字幕无码久久久妻妇 | 国产精品成人无码久久久久久 | 久久99国产精品久久99| 亚洲乱码中文字幕久久孕妇黑人| 精品无码久久久久久国产| 99国内精品久久久久久久| 97精品国产91久久久久久| 国产精品一区二区久久不卡| 久久国产乱子伦免费精品| 久久久精品2019免费观看| 青草国产精品久久久久久| 久久偷看各类wc女厕嘘嘘| 欧洲精品久久久av无码电影| 99精品国产99久久久久久97| 久久亚洲精精品中文字幕| 久久99久久99精品免视看动漫| 精品无码久久久久久尤物|