• <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>
            asm, c, c++ are my all
            -- Core In Computer
            posts - 139,  comments - 123,  trackbacks - 0

            [轉]const的用法

            1.修飾類的數據成員
            const數據成員只是在某個對象的生命周期內是常量.如果創建多個對象,那么每個對象的const數據成員可以不一樣.所以,不能在類聲明中初始化const數據成員.如:
            class A
            {
            ?? const int size = 100;// 錯誤
            ?? int array[size];//錯誤,未知的數組大小
            }
            const類數據成員,只能在類的構造函數的初始化列表中進行.要想建立整個類都是恒定的常量的數據,可以用類中的枚舉.如:
            class A
            {
            enum {size1 = 100, size2 = 200};
            int array[size1];
            }

            2.只有聲明為const的成員函數才能被一個const對象調用

            3.在另一連接文件中引用const常量.
            extern const int i

            4.對于const對象,c++既允許對其進行靜態初始化,也允許對其進行動態初始化.const對象具有從構造函數完成到析構函數執行之前的不變性.

            5.常量與數組的組合有什么特殊嗎?
            我們給出下面的代碼:
            const int size[3]={10,20,50};
            int array[size[2]];
            編譯通不過!為什么呢?const可以用于集合,但編譯器不能把一個集合存放在它的符號表里,所以必須分配內存。在這種情況下,const意味著“不能改變的一塊存儲”。然而,其值在編譯時不能被使用,因為編譯器在編譯時不需要知道存儲的內容。自然,作為數組的大小就不行了
            你再看看下面的例子:
            class A
            {
            public:
            A(int i=0):test[2]({1,2}) {} file://你/認為行嗎?
            private:
            const int test[2];
            };
            C++標準有一個規定,不允許無序對象在類內部初始化,數組顯然是一個無序的,所以這樣的初始化是錯誤的!對于他,只能在類的外部進行初始化,如果想讓它通過,只需要聲明為靜態的,然后初始化。
            這里我們看到,常量與數組的組合沒有什么特殊!一切都是數組惹的禍!

            (7)什么情況下為const分配內存?
            以下是我想到的可能情況,當然,有的編譯器進行了優化,可能不分配內存。
            A、作為非靜態的類成員時;
            B、用于集合時;
            C、被取地址時;
            D、在main函數體內部通過函數來獲得值時;
            E、const的 class或struct有用戶定義的構造函數、析構函數或基類時;。
            F、當const的長度比計算機字長還長時;
            G、參數中的const;
            H、使用了extern時。

            (8)與static搭配會不會有問題?
            假設有一個類:
            class A
            {
            public:
            ......
            static void f() const { ......}
            ......
            };
            我們發現編譯器會報錯,因為在這種情況下static不能夠與const共存!因為static沒有this指針,但是const修飾this指針.

            (9)如何修改常量?
            有時候我們卻不得不對類內的數據進行修改,但是我們的接口卻被聲明了const,那該怎么處理呢?我對這個問題的看法如下:
            1)標準用法:mutable
            class A
            {
            public:
            A(int i=0):test(i) { }
            void Setvalue(int i)const { test=i; }
            private:
            mutable int test; file://這/里處理!
            };
            2)強制轉換:const_cast
            class A
            {
            public:
            A(int i=0):test(i) { }
            void Setvalue(int i)const
            { const_cast <int>(test)=i; }//這里處理!
            private:
            int test;
            };

            (10)最后我們來討論一下常量對象的動態創建。
            既然編譯器可以動態初始化常量,就自然可以動態創建,例如:
            const int* pi=new const int(10);
            這里要注意2點:
            1)const對象必須被初始化!所以(10)是不能夠少的。
            2)new返回的指針必須是const類型的。
            那么我們可不可以動態創建一個數組呢?
            答案是否定的,因為new內置類型的數組,不能被初始化。

            posted on 2006-06-15 06:59 Jerry Cat 閱讀(542) 評論(0)  編輯 收藏 引用

            <2006年10月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(7)

            隨筆檔案

            最新隨筆

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            中文字幕久久欲求不满| 日韩欧美亚洲综合久久影院d3| 精品人妻伦九区久久AAA片69| 99久久精品费精品国产| 日韩AV毛片精品久久久| 久久久久人妻精品一区二区三区 | 94久久国产乱子伦精品免费| 国产成人无码精品久久久免费| 开心久久婷婷综合中文字幕| 五月丁香综合激情六月久久| 91精品国产高清久久久久久91 | 久久精品国产乱子伦| 国产午夜福利精品久久2021| 激情久久久久久久久久| 久久精品人人做人人爽97| 久久93精品国产91久久综合| 久久久久亚洲精品无码蜜桃| 久久综合一区二区无码| 国产成人久久精品麻豆一区| 久久婷婷五月综合97色一本一本 | 久久久精品人妻无码专区不卡| 亚洲精品乱码久久久久久中文字幕| 成人精品一区二区久久久| 欧美喷潮久久久XXXXx| 99精品国产免费久久久久久下载 | 久久久黄片| 亚洲午夜久久影院| 久久精品国产精品亚洲毛片| 国产精品99久久久精品无码| 亚洲国产成人久久笫一页| 色综合久久综精品| 亚洲狠狠久久综合一区77777| 国产亚洲精久久久久久无码| 国产精品女同久久久久电影院| 久久无码AV中文出轨人妻| 九九精品久久久久久噜噜| 久久久精品人妻无码专区不卡| 久久se这里只有精品| 国产精品女同一区二区久久| 99久久精品国产一区二区三区 | 超级碰久久免费公开视频|