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

            寶杉的博客

            UNIX/LINUX;ACE;SNMP;C++
            posts - 33, comments - 23, trackbacks - 0, articles - 0

            08-09 缺省值

            Posted on 2007-08-13 10:21 寶杉 閱讀(214) 評論(0)  編輯 收藏 引用 所屬分類: C++

            缺省值

            提高程序易用性,避免每次調用函數(shù)參數(shù)都相同的情況。

            缺省值只能出現(xiàn)在函數(shù)聲明中,不能在函數(shù)定義中。

            兩個原因:

            一是函數(shù)的實現(xiàn)(定義)本來就與參數(shù)是否有缺省值無關,所以沒有必要讓缺省值出現(xiàn)在函數(shù)的定義體中。

            二是參數(shù)的缺省值可能會改動,顯然修改函數(shù)的聲明比修改函數(shù)的定義要方便。

            規(guī)則:參數(shù)從后向前缺省

            正確的示例如下:

            void Foo(int x, int y=0, int z=0);

            錯誤的示例如下:

            void Foo(int x=0, int y, int z=0);  

            但要避免二義性

            C++exams\default_para

             

            運算符重載及其規(guī)則

            運算符即可定義為成員函數(shù),也可定義為全局函數(shù)。

            規(guī)則如下:

            運算符

            規(guī)則

            所有的一元運算符

            建議重載為成員函數(shù)

            = () [] ->

            只能重載為成員函數(shù)

            += -= /= *= &= |= ~= %= >>= <<=

            建議重載為成員函數(shù)

            所有其它運算符

            建議重載為全局函數(shù)

             

            不能重載的運算符

            1)不能改變C++內部數(shù)據(jù)類型(如int,float等)的運算符。

            2)不能重載‘.’,因為‘.’在類中對任何成員都有意義,已經(jīng)成為標準用法。

            3)不能重載目前C++運算符集合中沒有的符號,如#,@,$等。原因有兩點,一是難以理解,二是難以確定優(yōu)先級。

            4)對已經(jīng)存在的運算符進行重載時,不能改變優(yōu)先級規(guī)則,否則將引起混亂。

             

            函數(shù)內聯(lián)

            目的:提高執(zhí)行效率。

            Q為什么要用?

            A提高執(zhí)行效率。

            Q如何提高?

            A宏代碼本身不是函數(shù),但使用起來象函數(shù)。預處理器用復制宏代碼的方式代替函數(shù)調用,省去了參數(shù)壓棧、生成匯編語言的CALL調用、返回參數(shù)、執(zhí)行return等過程,從而提高了速度。

            Q缺點?

            使用宏代碼最大的缺點是容易出錯,預處理器在復制宏代碼時常常產生意想不到的邊際效應。

             

             

            例如:

            #define MAX(a, b)       (a) > (b) ? (a) : (b)

            語句

            result = MAX(i, j) + 2 ;

            將被預處理器解釋為

            result = (i) > (j) ? (i) : (j) + 2 ;

            由于運算符‘+’比運算符‘:’的優(yōu)先級高,所以上述語句并不等價于期望的

            result = ( (i) > (j) ? (i) : (j) ) + 2 ;

            如果把宏代碼改寫為

            #define MAX(a, b)       ( (a) > (b) ? (a) : (b) )

            則可以解決由優(yōu)先級引起的錯誤。但是即使使用修改后的宏代碼也不是萬無一失的,例如語句result = MAX(i++, j);

            將被預處理器解釋為

            result = (i++) > (j) ? (i++) : (j);

            對于C++ 而言,使用宏代碼還有另一種缺點:無法操作類的私有數(shù)據(jù)成員

            亚洲AⅤ优女AV综合久久久| 久久婷婷五月综合国产尤物app| 狠狠色丁香久久婷婷综合图片| 伊人情人综合成人久久网小说| 人人狠狠综合久久88成人| 青青草原精品99久久精品66| 青青草原1769久久免费播放| 国产无套内射久久久国产| 久久久久亚洲av综合波多野结衣| 久久精品黄AA片一区二区三区| 久久国产香蕉一区精品| 久久久久人妻一区二区三区| 9久久9久久精品| 伊人久久精品无码二区麻豆| 久久99热狠狠色精品一区| 奇米影视7777久久精品人人爽| 久久精品国产亚洲AV香蕉| 欧美久久久久久精选9999| 99国产精品久久| 久久99久国产麻精品66| 中文字幕无码久久久| 国产精品久久久久久影院| 久久无码人妻一区二区三区午夜 | 久久亚洲精品国产精品| 久久se精品一区二区| 77777亚洲午夜久久多喷| 精品无码人妻久久久久久| 国产午夜精品理论片久久影视| 久久久久久久女国产乱让韩| 精品人妻伦一二三区久久| 成人妇女免费播放久久久| 中文字幕人妻色偷偷久久 | 久久久久久免费视频| 亚洲国产精品久久久久网站| 91视频国产91久久久| 国产高潮国产高潮久久久| 无码专区久久综合久中文字幕| 无码国内精品久久人妻| 伊人久久大香线蕉综合Av| 亚洲国产精品无码久久久不卡| 久久精品国产亚洲AV大全|