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

            [轉(zhuǎn)]const的用法

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

            2.只有聲明為const的成員函數(shù)才能被一個(gè)const對(duì)象調(diào)用

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

            4.對(duì)于const對(duì)象,c++既允許對(duì)其進(jìn)行靜態(tài)初始化,也允許對(duì)其進(jìn)行動(dòng)態(tài)初始化.const對(duì)象具有從構(gòu)造函數(shù)完成到析構(gòu)函數(shù)執(zhí)行之前的不變性.

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

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

            (8)與static搭配會(huì)不會(huì)有問(wèn)題?
            假設(shè)有一個(gè)類:
            class A
            {
            public:
            ......
            static void f() const { ......}
            ......
            };
            我們發(fā)現(xiàn)編譯器會(huì)報(bào)錯(cuò),因?yàn)樵谶@種情況下static不能夠與const共存!因?yàn)閟tatic沒(méi)有this指針,但是const修飾this指針.

            (9)如何修改常量?
            有時(shí)候我們卻不得不對(duì)類內(nèi)的數(shù)據(jù)進(jìn)行修改,但是我們的接口卻被聲明了const,那該怎么處理呢?我對(duì)這個(gè)問(wèn)題的看法如下:
            1)標(biāo)準(zhǔn)用法:mutable
            class A
            {
            public:
            A(int i=0):test(i) { }
            void Setvalue(int i)const { test=i; }
            private:
            mutable int test; file://這/里處理!
            };
            2)強(qiáng)制轉(zhuǎn)換: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)最后我們來(lái)討論一下常量對(duì)象的動(dòng)態(tài)創(chuàng)建。
            既然編譯器可以動(dòng)態(tài)初始化常量,就自然可以動(dòng)態(tài)創(chuàng)建,例如:
            const int* pi=new const int(10);
            這里要注意2點(diǎn):
            1)const對(duì)象必須被初始化!所以(10)是不能夠少的。
            2)new返回的指針必須是const類型的。
            那么我們可不可以動(dòng)態(tài)創(chuàng)建一個(gè)數(shù)組呢?
            答案是否定的,因?yàn)閚ew內(nèi)置類型的數(shù)組,不能被初始化。

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

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



            <2006年7月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿(7)

            隨筆檔案

            最新隨筆

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            精品久久人人爽天天玩人人妻| 国产69精品久久久久9999| 久久久久国产成人精品亚洲午夜| 久久AAAA片一区二区| 久久综合成人网| 色综合久久久久久久久五月| 国产精品久久精品| 怡红院日本一道日本久久| 国产精品美女久久久网AV| 亚洲国产天堂久久综合| 精品少妇人妻av无码久久| 久久久久久A亚洲欧洲AV冫| 久久夜色精品国产噜噜亚洲a| 久久精品人成免费| 香蕉久久影院| 99热成人精品免费久久| 国色天香久久久久久久小说| 97精品伊人久久久大香线蕉| 色婷婷久久综合中文久久蜜桃av| 久久av高潮av无码av喷吹| 99久久精品日本一区二区免费| 天天影视色香欲综合久久| 日韩精品久久久久久| 一本色道久久综合狠狠躁| 尹人香蕉久久99天天拍| 久久国产成人亚洲精品影院| 国产一久久香蕉国产线看观看| 少妇人妻综合久久中文字幕| 深夜久久AAAAA级毛片免费看| 韩国三级中文字幕hd久久精品| 国内精品久久久久影院优| 久久天天躁狠狠躁夜夜网站| 亚洲国产欧洲综合997久久| 久久精品国产男包| 亚洲精品美女久久久久99小说| 久久99亚洲综合精品首页| 久久午夜综合久久| 精品久久久久久无码国产| 国产精品久久久久久一区二区三区 | 亚洲伊人久久成综合人影院 | 久久亚洲国产精品成人AV秋霞 |