• <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
               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
            一 static 產生背景

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

            在棧上分配的空間在此函數執行結束時會釋放掉,這樣就產生了一個問題: 如果想將函數中此變量的值保存至

            下一次調用時,如何實現?

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

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

                   類的靜態成員也是這個道理。


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

            器將此變量在程序的靜態存儲區分配空間保存,這樣即實現了目的,又使得此變量的存取范圍不變。


            2) 具體作用

            Static作用分析總結:static總是使得變量或對象的存儲形式變成靜態存儲,連接方式變成內部連接,對于局

            部變量(已經是內部連接了),它僅改變其存儲方式;對于全局變量(已經是靜態存儲了),它僅改變其連接

            類型。(1 連接方式:成為內部連接;2 存儲形式:存放在靜態全局存儲區)
            二 const 產生背景

            a) C++有一個類型嚴格的編譯系統,這使得C++程序的錯誤在編譯階段即可發現許多,從而使得出錯率大為減少

            ,因此,也成為了C++與C相比,有著突出優點的一個方面。

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

            少在三個方面優點突出:

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

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

            二是可以很方便地進行參數的調整與修改,如上例,當人數由107變為201時,改動此處即可;

            三是提高了程序的執行效率,由于使用了預編譯器進行值替代,并不需要為這些常量分配存儲空間,所以執行

            的效率較高。

            然而,預處理語句雖然有以上的許多優點,但它有個比較致命的缺點,即,預處理語
            句僅僅只是簡單值替代,缺乏類型的檢測機制。這樣預處理語句就不能享受C++嚴
            格類型檢查的好處,從而可能成為引發一系列錯誤的隱患。


            Const 推出的初始目的,正是為了取代預編譯指令,消除它的缺點,同時

            繼承它的優點。

            現在它的形式變成了:

            Const DataType VariableName = VariableValue ;

            2) 具體作用

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

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

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

             分析:const 是一個左結合的類型修飾符,它與其左側的類型修飾符和為一個

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


            2.const 限定函數的傳遞值參數:

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


            3.const 限定函數的值型返回值:

            const int Fun1();
            const MyClass Fun2();
                 分析:上述寫法限定函數的返回值不可被更新,當函數返回內部的類型時(如Fun1),已經是一個數值,

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

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


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


            5. const 限定類的成員函數:

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

            const,因為const已經成為類型信息的一部分。

            獲得能力:可以操作常量對象。

            失去能力:不能修改類的數據成員,不能在函數中調用其他不是const的函數。

            三 inline 產生背景

            inline這個關鍵字的引入原因和const十分相似,inline 關鍵字用來定義一個類的內聯函數,引入它的主要原

            因是用它替代C中

            表達式形式的宏定義。

            表達式形式的宏定義一例:

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

            是預編譯器上符號表的簡單替換,不能進行參數有效性檢測及使用C++類的成員訪問控制。

            inline 推出的目的,也正是為了取代這種表達式形式的宏定義,它消除了它的缺點,同時又很好地繼承了它的

            優點。inline代碼放入預編譯器符號表中,高效;它是個真正的函數,調用時有嚴格的參數檢測;它也可作為

            類的成員函數。


            2) 具體作用

            直接在class類定義中定義各函數成員,系統將他們作為內聯函數處理; 成員函數是內聯函數,意味著:每個

            對象都有該函數一份獨立的拷貝。
            在類外,如果使用關鍵字inline定義函數成員,則系統也會作為內聯函數處理;

            C關鍵字
            #define 宏名
            要替換的代碼

            宏定義,保存在預編譯器的符號表中,執行高效;作為一種簡單的符號替換,不進行其中參數有效性的檢測


            typedef
            已有類型
            新類型

            別名,
            常用于創建平臺無關類型, typedef 在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文本替換。
            国产午夜精品久久久久免费视| 亚洲精品乱码久久久久久蜜桃图片| 久久精品国产99国产电影网| 国产亚洲综合久久系列| 天天久久狠狠色综合| 久久只这里是精品66| 色欲久久久天天天综合网精品 | 久久久久亚洲AV无码麻豆| 99久久免费国产特黄| 欧美久久天天综合香蕉伊| 久久ww精品w免费人成| 久久久久国产精品麻豆AR影院 | 色99久久久久高潮综合影院| 久久99热只有频精品8| 精品无码久久久久久久久久 | 久久精品国产亚洲综合色| 欧美日韩精品久久久久| 久久精品国产精品亜洲毛片| 99久久婷婷国产综合亚洲| 四虎国产精品成人免费久久| 久久久久久av无码免费看大片| 久久精品国产亚洲av日韩| 免费无码国产欧美久久18| 少妇久久久久久被弄到高潮 | 日本一区精品久久久久影院| 久久精品亚洲一区二区三区浴池| 日韩欧美亚洲国产精品字幕久久久| 久久久久久久久无码精品亚洲日韩| 久久人人爽人人爽人人片av麻烦 | 亚洲αv久久久噜噜噜噜噜| 欧美日韩精品久久久久| 久久久黄片| 久久亚洲国产精品123区| 久久久久久国产精品无码下载 | 人妻系列无码专区久久五月天| 99久久精品国产一区二区蜜芽| 四虎国产精品免费久久5151| 韩国三级中文字幕hd久久精品| 99久久国产免费福利| 久久亚洲天堂| 国产成人精品三上悠亚久久|