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

            精品久久久久久无码不卡| 久久超乳爆乳中文字幕| 久久久精品久久久久久 | 午夜精品久久久久久99热| 少妇内射兰兰久久| 激情五月综合综合久久69| 人妻无码精品久久亚瑟影视| 日韩人妻无码精品久久久不卡| 色综合合久久天天综合绕视看| 一个色综合久久| 欧美丰满熟妇BBB久久久| 热综合一本伊人久久精品| 国产日产久久高清欧美一区| 7777精品伊人久久久大香线蕉| 国产午夜精品理论片久久影视 | 久久精品综合网| 国产精品va久久久久久久| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 久久综合给合久久狠狠狠97色| 精品欧美一区二区三区久久久| 久久亚洲私人国产精品vA| 久久人人爽人人人人爽AV| 国产精品久久久久久久久软件| 伊人久久大香线蕉精品| 久久66热人妻偷产精品9| 久久精品国产亚洲av麻豆蜜芽 | 国产成人精品久久一区二区三区av | 精品久久人人爽天天玩人人妻| avtt天堂网久久精品| 人妻少妇久久中文字幕| 狠狠综合久久AV一区二区三区 | 久久精品成人一区二区三区| 久久最新精品国产| 日韩亚洲欧美久久久www综合网| AV无码久久久久不卡网站下载| 97久久精品无码一区二区| 精品国产乱码久久久久久郑州公司| 亚洲国产欧美国产综合久久 | 91麻豆国产精品91久久久| 久久综合亚洲色一区二区三区| 日韩精品久久久久久久电影|