• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • thinking in c++ 之const小結

    發表于:2007-05-25來源:作者:點擊數: 標簽:Const預處理小結因為C++
    因為預處理只做文本替代,它既沒有類型檢查思想,也沒有類型檢查工具,所以預處理器的值替代會產生一些微小的問題,這些問題在c++中可以通過使用const而避免。 const小結: 1,const的引入: 因為預處理只做文本替代,它既沒有類型檢查思想,也沒有類型檢查
    因為預處理只做文本替代,它既沒有類型檢查思想,也沒有類型檢查工具,所以預處理器的值替代會產生一些微小的問題,這些問題在c++中可以通過使用const而避免。

    const小結:
    1,const的引入:
    因為預處理只做文本替代,它既沒有類型檢查思想,也沒有類型檢查工具,所以預處理器的值替代會產生一些微小的問題,這些問題在c++中可以通過使用const而避免。
    2,c++編譯器通常并不為const分配空間,它把這個定義保存在符號表中。當const常量被使用時,編譯的時候就進行常量折疊。有一些情況會強制編譯器進行存儲空間分配
    (1),使用extern
    (2),需要取一個const的地址
    3,const是默認內部連接的,可使用extern改變它。
    4,用const定義的常量必須進行初始化,而且初始化必須在定義的地方。
    5,const可以用于集合,但編譯器不能把一個集合存放在他的符號表中,所以必須分配內存。此時,const意味著“不能改變的一塊存儲空間“。然而,其值在編譯時不能使用,因為編譯器在編譯時不需要知道存儲的內容。
    6,在c中const的意思是“一個不能被改變的普通變量“,在c中它總是占用存儲空間而且它的名字是全局符。
    即: const bufsize = 100;
    char buf[bufsize]; // 是不對的,因為bufsize占用存儲的某個地方,c編譯器不知道它在編譯時的值。
    7,const與指針
    (1) const int* x; 等同于 int const * x;
    注:x指向的數據為const,x本身不是
    int* const x; x為const的,x指向的數據不是;
    (2) 我們可以把一個非const對象的指針賦給一個const對象的指針;但不可以把一個const對象的指針賦給一個非const對象的指針
    即: int d = 1;
    const int* v = &d; // that's ok!
    d++; // that's ok!
    //! (*v)++; //illegal
    const int e = 3;
    //! int* w = &e; // illegal
    8,const類型的函數參數和返回值
    (1),用const限定的參數表示該參數在函數內是不可修改的.
    (2),返回值為const,限定了該返回值不能用做左值
    9,臨時變量自動成為常量
    10,為防止處理函數對const限定的值進行修改,所以定義將指向const對象的指針傳給普通指針為不合法.
    11:類里的const:
    (1),在一個類里使用const的意思是"在這個對象壽命期內,這是一個常量",它在每個類對象里分配存儲并代表一個值.
    (2),對某個常量來講,每個不同的對象可以含有一個不同的值.初始化工作必須發生在構造函數里.const的初始化必須發生在構造函數的任何代碼之前,一般在構造函數初始化表達式表中進行.
    (3),因為在類對象里進行存儲空間的分配,編譯器不知道const成員的內容是什么,所以不能把它用作編譯期間的常量.即,如下是不合法的:
    class bob {
    const size = 100; //illegal
    int array[size]; //illegal
    };
    在類里的const的意思是:“在這個特定對象的壽命期內,而不是整個的類來說,這個值是不變的?!?br /> (3)如何建立一個可以用在常數表達式里的類常量?
    使用不帶實力的無標記的enum。
    枚舉的所有制必須在編譯時建立,它對類來說是局部的,但常數表達式能得到它的值。使用枚舉不會占用對象的存儲空間。
    例: class bunch {
    enum { size = 1000 };
    int i[size];
    };
    (4),const對象和成員函數:
    const對象表示"該對象的數據成員在對象壽命期內不改變“。
    如果聲明一個成員函數為const函數,則等于告訴編譯器可以為一個const對象調用該函數。
    可以聲明為const成元函數的函數必須不改變對象的任何成員,并且不調用任何非const成元函數
    (5),按位const與按成員const
    const成元函數如何改變類的成員:
    (1),按位const:對象中的每個位是固定的,所以對象的每個位的映像從不改變。對應方法:強制轉換const: ((y*)this)->j++;
    (2),按成員const:雖然整個對象從概念上講是不變的,但是某個成員可能改變。對應方法:mutable int j;
    12,volatile變量:
    為滿足多任務處理的需要,引入volatile限定詞,volatile告訴編譯器不要對volatile限定的變量做任何假設;
    const volatile + 對象:該對象不能被程序員改變,但可被外界改變。

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>