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

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

            成人综合久久精品色婷婷| 久久中文字幕精品| 日本三级久久网| 少妇人妻综合久久中文字幕| 久久久国产视频| 成人国内精品久久久久一区| 久久久噜噜噜久久中文字幕色伊伊| 一本伊大人香蕉久久网手机| 久久久一本精品99久久精品66| 2019久久久高清456| 狠色狠色狠狠色综合久久| 久久久一本精品99久久精品88| 国产日韩久久免费影院| 69SEX久久精品国产麻豆| 久久久久久久久久久久中文字幕| 青青青国产精品国产精品久久久久 | 99久久精品免费| 久久午夜福利无码1000合集| 精品99久久aaa一级毛片| 99久久免费只有精品国产| 久久天天躁狠狠躁夜夜躁2014| 亚洲乱亚洲乱淫久久| 亚洲国产精品无码久久一区二区| 亚洲欧美精品一区久久中文字幕| 久久香蕉国产线看观看猫咪?v| 亚洲国产成人久久一区WWW| 国产午夜久久影院| 久久久精品2019免费观看| 亚洲色欲久久久综合网| 国产综合久久久久久鬼色| 亚洲午夜久久久久久久久久| 尹人香蕉久久99天天拍| 亚洲精品午夜国产va久久| 久久久久无码专区亚洲av| 久久精品卫校国产小美女| 久久亚洲国产精品123区| 久久国产午夜精品一区二区三区| 亚洲一区中文字幕久久| 久久精品国产第一区二区| 欧美久久一区二区三区| 欧美精品乱码99久久蜜桃|