• <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>
            posts - 29, comments - 16, trackbacks - 0, articles - 0
               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            一 static 產(chǎn)生背景

            引出原因:函數(shù)內(nèi)部定義的變量,在程序執(zhí)行到它的定義處時(shí),編譯器為它在棧上分配空間,大家知道,函數(shù)

            在棧上分配的空間在此函數(shù)執(zhí)行結(jié)束時(shí)會(huì)釋放掉,這樣就產(chǎn)生了一個(gè)問題: 如果想將函數(shù)中此變量的值保存至

            下一次調(diào)用時(shí),如何實(shí)現(xiàn)?

            最容易想到的方法是定義一個(gè)全局的變量,但定義為一個(gè)全局變量有許多缺點(diǎn),最明顯的缺點(diǎn)是破壞了此變量

            的訪問范圍(使得在此函數(shù)中定義的變量,不僅僅受此函數(shù)控制)。

                   類的靜態(tài)成員也是這個(gè)道理。


            解決方案:因此C++ 中引入了static,用它來修飾變量,它能夠指示編譯

            器將此變量在程序的靜態(tài)存儲(chǔ)區(qū)分配空間保存,這樣即實(shí)現(xiàn)了目的,又使得此變量的存取范圍不變。


            2) 具體作用

            Static作用分析總結(jié):static總是使得變量或?qū)ο蟮拇鎯?chǔ)形式變成靜態(tài)存儲(chǔ),連接方式變成內(nèi)部連接,對(duì)于局

            部變量(已經(jīng)是內(nèi)部連接了),它僅改變其存儲(chǔ)方式;對(duì)于全局變量(已經(jīng)是靜態(tài)存儲(chǔ)了),它僅改變其連接

            類型。(1 連接方式:成為內(nèi)部連接;2 存儲(chǔ)形式:存放在靜態(tài)全局存儲(chǔ)區(qū))
            二 const 產(chǎn)生背景

            a) C++有一個(gè)類型嚴(yán)格的編譯系統(tǒng),這使得C++程序的錯(cuò)誤在編譯階段即可發(fā)現(xiàn)許多,從而使得出錯(cuò)率大為減少

            ,因此,也成為了C++與C相比,有著突出優(yōu)點(diǎn)的一個(gè)方面。

            b) C中很常見的預(yù)處理指令 #define VariableName VariableValue 可以很方便地進(jìn)行值替代,這種值替代至

            少在三個(gè)方面優(yōu)點(diǎn)突出:

            一是避免了意義模糊的數(shù)字出現(xiàn),使得程序語義流暢清晰,如下例:

              #define USER_NUM_MAX 107 這樣就避免了直接使用107帶來的困惑。

            二是可以很方便地進(jìn)行參數(shù)的調(diào)整與修改,如上例,當(dāng)人數(shù)由107變?yōu)?01時(shí),改動(dòng)此處即可;

            三是提高了程序的執(zhí)行效率,由于使用了預(yù)編譯器進(jìn)行值替代,并不需要為這些常量分配存儲(chǔ)空間,所以執(zhí)行

            的效率較高。

            然而,預(yù)處理語句雖然有以上的許多優(yōu)點(diǎn),但它有個(gè)比較致命的缺點(diǎn),即,預(yù)處理語
            句僅僅只是簡(jiǎn)單值替代,缺乏類型的檢測(cè)機(jī)制。這樣預(yù)處理語句就不能享受C++嚴(yán)
            格類型檢查的好處,從而可能成為引發(fā)一系列錯(cuò)誤的隱患。


            Const 推出的初始目的,正是為了取代預(yù)編譯指令,消除它的缺點(diǎn),同時(shí)

            繼承它的優(yōu)點(diǎn)。

            現(xiàn)在它的形式變成了:

            Const DataType VariableName = VariableValue ;

            2) 具體作用

            1.const 用于指針的兩種情況分析:

             
            int const *A;  //A可變,*A不可變

             
            int *const A;  //A不可變,*A可變

             分析:const 是一個(gè)左結(jié)合的類型修飾符,它與其左側(cè)的類型修飾符和為一個(gè)

            類型修飾符,所以,int const 限定 *A,不限定A。int *const 限定A,不限定*A。


            2.const 限定函數(shù)的傳遞值參數(shù):

             
            void Fun(const int Var);
                 分析:上述寫法限定參數(shù)在函數(shù)體中不可被改變。


            3.const 限定函數(shù)的值型返回值:

            const int Fun1();
            const MyClass Fun2();
                 分析:上述寫法限定函數(shù)的返回值不可被更新,當(dāng)函數(shù)返回內(nèi)部的類型時(shí)(如Fun1),已經(jīng)是一個(gè)數(shù)值,

            當(dāng)然不可被賦值更新,所以,此時(shí)const無意義,最好去掉,以免困惑。當(dāng)函數(shù)返回自定義的類型時(shí)(如Fun2)

            ,這個(gè)類型仍然包含可以被賦值的變量成員,所以,此時(shí)有意義。


            4. 傳遞與返回地址: 此種情況最為常見,由地址變量的特點(diǎn)可知,適當(dāng)使用const,意義昭然。


            5. const 限定類的成員函數(shù):

            class ClassName {
             public:
              int Fun() const;
             .....
            }
              注意:采用此種const 后置的形式是一種規(guī)定,亦為了不引起混淆。在此函數(shù)的聲明中和定義中均要使用

            const,因?yàn)閏onst已經(jīng)成為類型信息的一部分。

            獲得能力:可以操作常量對(duì)象。

            失去能力:不能修改類的數(shù)據(jù)成員,不能在函數(shù)中調(diào)用其他不是const的函數(shù)。

            三 inline 產(chǎn)生背景

            inline這個(gè)關(guān)鍵字的引入原因和const十分相似,inline 關(guān)鍵字用來定義一個(gè)類的內(nèi)聯(lián)函數(shù),引入它的主要原

            因是用它替代C中

            表達(dá)式形式的宏定義。

            表達(dá)式形式的宏定義一例:

               #define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)
                   這種表達(dá)式形式宏形式與作用跟函數(shù)類似,但它使用預(yù)編譯器,沒有堆棧,使用上比函數(shù)高效。但它只

            是預(yù)編譯器上符號(hào)表的簡(jiǎn)單替換,不能進(jìn)行參數(shù)有效性檢測(cè)及使用C++類的成員訪問控制。

            inline 推出的目的,也正是為了取代這種表達(dá)式形式的宏定義,它消除了它的缺點(diǎn),同時(shí)又很好地繼承了它的

            優(yōu)點(diǎn)。inline代碼放入預(yù)編譯器符號(hào)表中,高效;它是個(gè)真正的函數(shù),調(diào)用時(shí)有嚴(yán)格的參數(shù)檢測(cè);它也可作為

            類的成員函數(shù)。


            2) 具體作用

            直接在class類定義中定義各函數(shù)成員,系統(tǒng)將他們作為內(nèi)聯(lián)函數(shù)處理; 成員函數(shù)是內(nèi)聯(lián)函數(shù),意味著:每個(gè)

            對(duì)象都有該函數(shù)一份獨(dú)立的拷貝。
            在類外,如果使用關(guān)鍵字inline定義函數(shù)成員,則系統(tǒng)也會(huì)作為內(nèi)聯(lián)函數(shù)處理;

            C關(guān)鍵字
            #define 宏名
            要替換的代碼

            宏定義,保存在預(yù)編譯器的符號(hào)表中,執(zhí)行高效;作為一種簡(jiǎn)單的符號(hào)替換,不進(jìn)行其中參數(shù)有效性的檢測(cè)


            typedef
            已有類型
            新類型

            別名,
            常用于創(chuàng)建平臺(tái)無關(guān)類型, typedef 在編譯時(shí)被解釋,因此讓編譯器來應(yīng)付超越預(yù)處理器能力的文本替換。

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


            国产精品欧美久久久久天天影视| 99久久夜色精品国产网站| 亚洲综合精品香蕉久久网97| 精品久久8x国产免费观看| 久久99国产综合精品女同| 久久免费视频观看| 亚洲国产高清精品线久久| 久久久无码一区二区三区| 国产香蕉97碰碰久久人人| 亚洲午夜久久久影院| 婷婷综合久久狠狠色99h| 欧美精品福利视频一区二区三区久久久精品| 伊人精品久久久久7777| 久久夜色精品国产亚洲| 热re99久久6国产精品免费| 亚洲成色999久久网站| 日产精品久久久久久久| 伊人色综合久久天天| 久久精品国产99久久久| 狠狠色综合久久久久尤物| 日本欧美久久久久免费播放网| 久久最新精品国产| 婷婷综合久久中文字幕蜜桃三电影 | 欧美va久久久噜噜噜久久| 久久久久99精品成人片牛牛影视| 久久精品人人做人人爽电影蜜月| 久久精品人妻一区二区三区| 精品免费tv久久久久久久| 国产美女亚洲精品久久久综合| 久久无码人妻精品一区二区三区| 国产亚洲婷婷香蕉久久精品| 色综合久久综合中文综合网 | 麻豆亚洲AV永久无码精品久久| 久久综合给合综合久久| 久久九九久精品国产| 久久国产精品-久久精品| 久久永久免费人妻精品下载| 日本强好片久久久久久AAA| 亚洲人成伊人成综合网久久久| 伊人久久大香线蕉av不卡| 国产亚洲精久久久久久无码77777|