A. 變數宣告
1. const char *tVar;2. char const *tVar;
3. char * const tVar;
4. const char * const tVar;
加上括號方便了解
1. const (char) *tVar;-->把*tVar當作一個變數,所以*tVar的值,不可變
2. (char) const *tVar;-->同上
3. (char *) const tVar;-->tVar型別為(char *),tVar指標不可變, 右邊語法為一樣意思:const (char *) tVar;
4. const (char *) const tVar;-->指標與和指標所指到值,都不可變
B. Function內有const變數
1. void function(const int Var);2. void function(const char *Var);
3. void function(char * const Var);
加上括號方便了解,其實就與需告變數同
1. void function(const (char) tVar);-->tVar傳function內,變數值不可變(無意義,tVar本身就傳進去參數)
2. void function(const (char) *tVar);-->*tVar型別為(char),*tVar的值不可變
3. void function((char *) const tVar);-->tVar型別為(char *),tVar指標不可變(無意義, tVar也是傳進去參數)
C. const 放在Function的回傳值
1. const int function()2. const int *function()
3. int * const function()
加上括號方便了解,其實就與需告變數同
1. const (int) function()-->因回傳值是被assign的,所以沒意義
2. const (int) *function()-->把function()當成變數,應該較很清楚,*function()的值不可變。使用方式:const int *tValue = function();
3. (int *) const function()-->function()型別為(int *),回傳指標不可變。使用方式:int * const tValue = function();
D. const 拿來形容 object / object pointer / object reference
const 形容的物件,表示該物件為const物件,所以物件的任何member都不能改。object pointer / object reference 指到的物件也是一樣。const 形容的物件,該物件的任何非const成員函數都不能被呼叫用,因為任何非const成員函數都可能有修改成員變數的企圖。
例:
class A
{
void func1();
void func2() const;
}
const AAA aObj;
aObj.func1();-->錯誤
aObj.func2();-->正確
const AAA* aObj = new AAA();
aObj->func1();-->錯誤
aObj->func2();-->正確
E. const 形容 class內的變數
class中有const的成員的值固定,不能被修改,且只能在初始化時,給值。class A
{
const int mVal;
A(int mVal): nValue(mVal) {}; //初始化,給值
}
F. const 形容 class內的Function
class中有const的函數,不能修改class中任何非const成員函數。一般把const寫在函數最後。class A
{
void function() const; //const函式, 不改變物件的成員變數. 也不能呼叫任何非const成員函數。
}
G. const與define區別
1. compiler行為不同define-->在compile前,即作取代動作
const-->compile時,處理
2. 類別和檢查行為不同
define-->沒有型別,不做型別檢查,只是展開。
const-->型別型別資訊,在compile時,會檢查。
3. 存儲方式不同
define-->僅展開,不會分配記憶體。
const-->會在記憶體中分配
參考網址:
const 放置位置的意義
沒有留言:
張貼留言