• <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用法小議

            Posted on 2008-09-04 19:02 阿呆@Rachel 閱讀(1449) 評(píng)論(4)  編輯 收藏 引用 所屬分類(lèi): C++

            const是C++的關(guān)鍵字之一,與其他的關(guān)鍵字相比,C++初學(xué)者可能對(duì)于const的使用會(huì)一時(shí)摸不著頭腦,若能正確的使用const,將使你的程序更加Robust!


            測(cè)試題先行~~

            1 int i = 5;
            2 const int *ip = &i;
            3 int const *ip = &i;
            4 int* const ip = &i;
            5 const int* const ip = &i;

            對(duì)于上面四個(gè)條語(yǔ)句,你能說(shuō)出它們之間的區(qū)別嗎?
            2)和3)中const修飾的是*ip, 這表明ip所指向的變量i是const的,類(lèi)似*ip = 1的操作編譯的時(shí)候都會(huì)報(bào)錯(cuò);4)const修飾的是ip,說(shuō)明指針本身是const,修改指針指向的變量是合法的,而類(lèi)似++ip修改指針本身的操作是違法的;5)指針本身和指向的變量都是const的。

            const的用法主要體現(xiàn)在函數(shù)聲明中的應(yīng)用,它既可以修飾函數(shù)參數(shù),還可以修飾函數(shù)的返回值,此外對(duì)于類(lèi)的成員函數(shù),它還可以修飾整個(gè)函數(shù)。下面是一個(gè)簡(jiǎn)單簡(jiǎn)單的二維向量類(lèi):

            class Vector2D{
                
            float x, y;
            public:
                Vector2D( 
            float _x = 0float _y = 0 ) : x( _x ), y( _y )
                {}
                Vector2D( 
            const Vector2D &vec ) : x( vec.x ), y( vec.y )  // 修飾參數(shù)
                {} 
                
            float GetX() const { return x; }     // 修飾整個(gè)函數(shù)     
                const Vector2D operator + ( const Vector2D &rval ) const            // 修飾參數(shù),返回值和整個(gè)函數(shù)
                { return Vector2D( x + rval.x, y + rval.y );   }   
            };

            --const修飾函數(shù)參數(shù)
            在copy構(gòu)造函數(shù)中,const修飾的是函數(shù)的參數(shù),調(diào)用函數(shù)的時(shí)候,用相應(yīng)的變量初始化const常量,則在函數(shù)體中,按照const所修飾的部分進(jìn)行常量化,如形參為const Vector2D &vec,則不能對(duì)傳遞進(jìn)來(lái)的引用對(duì)象的進(jìn)行改變,從而保護(hù)了原對(duì)象的屬性。
            [Tips]const通常用于修飾指針或引用類(lèi)型的參數(shù)。

            --const修飾返回值
            在重載的向量加法運(yùn)算符的函數(shù)中,返回值用const修飾,這樣如下的賦值操作就非法的:
            Vector2D vec1, vec2, vec3;
            (vec1+vec2) = vec3;
            [Tips]一般情況下,函數(shù)的返回值為某個(gè)對(duì)象時(shí),如果將其聲明為const時(shí),多用于運(yùn)算符的重載。通常,函數(shù)返回值為某個(gè)對(duì)象或?qū)ο蟮囊脮r(shí),不用const來(lái)修飾。因?yàn)椋@樣返回的實(shí)例只能訪問(wèn)public成員和const成員函數(shù),并且賦值操作也是非法的,這樣的用法是非常罕見(jiàn)的。

            --const修飾類(lèi)的成員函數(shù)
            對(duì)于Vector2D::GetX()函數(shù),因?yàn)樗粫?huì)修改成員數(shù)據(jù),若聲明成const,如果函數(shù)實(shí)現(xiàn)中修改了成員變量,編譯的時(shí)候?qū)?bào)錯(cuò),這樣程序會(huì)更加的Robust~~

            [Tips]
            a.在你搞清楚const的用法之后,請(qǐng)大膽使用;
            b.在參數(shù)中使用const應(yīng)該使用引用或指針,而不是一般的對(duì)象實(shí)例;
            c.不要輕易的將函數(shù)的返回值類(lèi)型定為const;
            d.除了重載操作符外一般不要將返回值類(lèi)型定為對(duì)某個(gè)對(duì)象的const引用。

            Feedback

            # re: const用法小議  回復(fù)  更多評(píng)論   

            2009-01-09 22:05 by bigcoder
            寫(xiě)的很好,真的是一針見(jiàn)血,我引用下,謝謝 !

            # re: const用法小議  回復(fù)  更多評(píng)論   

            2009-03-25 11:51 by qustmao
            總結(jié)得不錯(cuò),,,,,

            學(xué)習(xí)了,,,,,

            # re: const用法小議  回復(fù)  更多評(píng)論   

            2009-09-10 16:36 by 學(xué)習(xí)者
            很好

            # re: const用法小議  回復(fù)  更多評(píng)論   

            2009-11-21 18:22 by xiaoyuemian
            贊!受教啦~
            免费一级欧美大片久久网 | 欧美国产成人久久精品| 国产午夜精品理论片久久影视 | 亚洲国产成人久久笫一页| 亚洲午夜久久影院| 99久久久精品| 色噜噜狠狠先锋影音久久| 97超级碰碰碰久久久久| 欧美亚洲国产精品久久蜜芽| 国产91色综合久久免费分享| 久久噜噜电影你懂的| 色综合久久综精品| 久久久久97国产精华液好用吗| 777久久精品一区二区三区无码 | 狠狠干狠狠久久| 久久夜色tv网站| 久久激情亚洲精品无码?V| 久久亚洲国产精品五月天婷| 久久国产亚洲精品| 久久久久久国产精品免费无码 | 亚洲精品乱码久久久久久中文字幕| 久久伊人五月丁香狠狠色| 亚洲AV无一区二区三区久久| 久久超乳爆乳中文字幕| 国产成人精品久久| 亚洲国产天堂久久综合| 色欲av伊人久久大香线蕉影院| 久久精品中文騷妇女内射| 久久97久久97精品免视看秋霞| 三级片免费观看久久| 久久永久免费人妻精品下载| 亚洲国产精品久久久久| 久久精品桃花综合| 94久久国产乱子伦精品免费| 人人妻久久人人澡人人爽人人精品| av无码久久久久久不卡网站| 久久久久一本毛久久久| 久久久久亚洲AV无码永不| 久久久久亚洲AV成人网| 久久国产乱子伦免费精品| 伊人 久久 精品|