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

            周四

            Posted on 2008-03-27 17:07 RichardHe 閱讀(158) 評論(1)  編輯 收藏 引用
            (1)對const的用法過去不是很明白,不過今天看了<<effective c++>>里面有一個巧妙的理解
            1 char *p            = "hello";             // 非const指針,
            2                                           // 非const數(shù)據(jù)
            3 const char *p        = "hello";           // 非const指針,
            4                                           // const數(shù)據(jù)
            5 char* const p        = "hello";           // const指針,
            6                                           // 非const數(shù)據(jù)
            7 const char* const p    = "hello";         // const指針,
            8                                           // const數(shù)據(jù)
            一般來說,你可以在頭腦里畫一條垂直線穿過指針聲明中的星號(*)位置,如果const出現(xiàn)在線的左邊,指針指向的數(shù)據(jù)為常量;如果const出現(xiàn)在線的右邊,指針本身為常量;如果const在線的兩邊都出現(xiàn),二者都是常量。

            (2)“通過值來傳遞一個對象”的具體含義是由這個對象的類的拷貝構(gòu)造函數(shù)定義的。這使得傳值成為一種非常昂貴的操作。
            如下面的代碼:
            1 student returnstudent(student s) { return s; }
            2 student plato;                     // plato(柏拉圖)在
            3                         // socrates(蘇格拉底)門下學(xué)習(xí)
            4 returnstudent(plato);                 // 調(diào)用returnstudent 

            這個看起來無關(guān)痛癢的函數(shù)調(diào)用過程,其內(nèi)部究竟發(fā)生了些什么呢?

            簡單地說就是:首先,調(diào)用了student的拷貝構(gòu)造函數(shù)用以將s初始化為plato;然后再次調(diào)用student的拷貝構(gòu)造函數(shù)用以將函數(shù)返回值 對象初始化為s;接著,s的析構(gòu)函數(shù)被調(diào)用;最后,returnstudent返回值對象的析構(gòu)函數(shù)被調(diào)用。所以,這個什么也沒做的函數(shù)的成本是兩個 student的拷貝構(gòu)造函數(shù)加上兩個student析構(gòu)函數(shù)。


            為避免這種潛在的昂貴的開銷,就不要通過值來傳遞對象,而要通過引用:

            1 const student& returnstudent(const student& s)
            2 return s; }
            這會非常高效:沒有構(gòu)造函數(shù)或析構(gòu)函數(shù)被調(diào)用,因為沒有新的對象被創(chuàng)建。

            引用幾乎都是通過指針來實現(xiàn)的,所以通過引用傳遞對象實際上是傳遞指針。因此,如果是一個很小的對象——例如int——傳值實際上會比傳引用更高效。

            Feedback

            # re: 周四  回復(fù)  更多評論   

            2008-03-27 20:56 by yanvenhom
            const char *p,const是修飾char的。
            char* const p,const是修飾p的。
            握手,這個東東我也前不久剛搞懂。

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            posts - 94, comments - 138, trackbacks - 0, articles - 94

            Copyright © RichardHe

            精品乱码久久久久久夜夜嗨| 99久久国产亚洲综合精品| 久久综合给久久狠狠97色| 久久国产欧美日韩精品| 色综合久久中文色婷婷| 久久午夜无码鲁丝片秋霞| 久久99精品国产麻豆| 久久97久久97精品免视看| 国内精品久久久久影院亚洲| www.久久精品| 久久天天躁狠狠躁夜夜躁2014| 久久超碰97人人做人人爱| 日韩欧美亚洲国产精品字幕久久久 | 91视频国产91久久久| 久久人搡人人玩人妻精品首页 | 久久99热国产这有精品| 久久久久久久综合日本| 久久久久国产一级毛片高清版| 99久久国产亚洲综合精品| 免费精品久久久久久中文字幕| 久久青草国产手机看片福利盒子 | 久久精品久久久久观看99水蜜桃| 91性高湖久久久久| 久久精品中文字幕无码绿巨人| 三级片免费观看久久| 久久强奷乱码老熟女| 国产ww久久久久久久久久| 国产精品视频久久| 狠狠色丁香婷婷综合久久来| 7777精品久久久大香线蕉| 日韩久久久久中文字幕人妻| 久久99精品久久久久久噜噜| 国产精品无码久久综合网| 日韩一区二区久久久久久 | 久久一区二区三区免费| 国内精品久久久久久不卡影院| 亚洲国产精品婷婷久久| 99久久免费国产特黄| 日韩一区二区久久久久久| 一本一道久久精品综合| 丁香久久婷婷国产午夜视频|