• <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 閱讀(162) 評(píng)論(1)  編輯 收藏 引用
            (1)對(duì)const的用法過(guò)去不是很明白,不過(guò)今天看了<<effective c++>>里面有一個(gè)巧妙的理解
            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ù)
            一般來(lái)說(shuō),你可以在頭腦里畫(huà)一條垂直線穿過(guò)指針聲明中的星號(hào)(*)位置,如果const出現(xiàn)在線的左邊,指針指向的數(shù)據(jù)為常量;如果const出現(xiàn)在線的右邊,指針本身為常量;如果const在線的兩邊都出現(xiàn),二者都是常量。

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

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

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


            為避免這種潛在的昂貴的開(kāi)銷(xiāo),就不要通過(guò)值來(lái)傳遞對(duì)象,而要通過(guò)引用:

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

            引用幾乎都是通過(guò)指針來(lái)實(shí)現(xiàn)的,所以通過(guò)引用傳遞對(duì)象實(shí)際上是傳遞指針。因此,如果是一個(gè)很小的對(duì)象——例如int——傳值實(shí)際上會(huì)比傳引用更高效。

            Feedback

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

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

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


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

            Copyright © RichardHe

            久久www免费人成看片| 国产ww久久久久久久久久| 久久AV高潮AV无码AV| 午夜不卡久久精品无码免费| 久久久精品2019免费观看| 久久久久久狠狠丁香| 久久精品国产亚洲AV香蕉| 日本精品久久久中文字幕| 久久久久久精品无码人妻| 日本精品久久久中文字幕| 伊人久久综合成人网| 久久996热精品xxxx| 99久久国产热无码精品免费| 色综合合久久天天给综看| 青青草原综合久久| 欧美一区二区三区久久综| 日韩中文久久| 久久久久国产一级毛片高清板 | 香港aa三级久久三级| 中文字幕久久亚洲一区| 国产综合免费精品久久久| 久久99国产综合精品| 7777精品久久久大香线蕉| 免费一级做a爰片久久毛片潮| 热久久国产精品| 久久精品国产一区| 色综合久久88色综合天天| 久久久久成人精品无码中文字幕 | 久久久久久无码国产精品中文字幕| 欧美丰满熟妇BBB久久久| 亚洲va中文字幕无码久久不卡 | 国产精品免费福利久久| 精品久久人妻av中文字幕| 久久久久久国产精品免费无码 | 伊人久久大香线焦AV综合影院| 亚洲国产成人久久综合区| 亚洲人成无码久久电影网站| 亚洲欧美精品一区久久中文字幕 | 久久成人国产精品一区二区| 久久国产精品一区| 久久午夜福利无码1000合集|