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


            国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 香蕉aa三级久久毛片| 99久久精品国产一区二区三区 | 亚洲日韩欧美一区久久久久我 | 开心久久婷婷综合中文字幕| 亚洲国产精品久久| 99久久国产综合精品五月天喷水 | 久久亚洲AV成人无码软件| 思思久久99热免费精品6| 亚洲中文字幕无码一久久区| 久久久久99精品成人片欧美| 2021精品国产综合久久| 欧美激情精品久久久久久久九九九 | 久久国产精品-久久精品| 免费观看久久精彩视频| 欧美激情精品久久久久久久九九九 | 成人妇女免费播放久久久| 国产精品久久久久影院嫩草| 97久久超碰国产精品旧版| 国产精品一区二区久久精品无码 | 久久久精品视频免费观看| 77777亚洲午夜久久多喷| 亚洲精品tv久久久久| 亚洲七七久久精品中文国产| 狠狠色丁香婷综合久久| 久久久久免费看成人影片| 久久久国产精品| 久久精品无码一区二区WWW| 99久久99久久精品国产| 97久久精品无码一区二区| 久久精品人人做人人爽电影| 亚洲国产婷婷香蕉久久久久久| 青青草国产成人久久91网| 久久婷婷色综合一区二区| 94久久国产乱子伦精品免费| 久久久无码精品亚洲日韩京东传媒| 2021国产精品久久精品| 久久亚洲国产精品一区二区| 久久久久人妻精品一区| 久久九九亚洲精品| 午夜不卡888久久|