文章稍長,但是舉例都很易懂。
1. 常量
c++用const將物件i定義為乙個常量。定義之後,i的值就不可以再變了,所以i必須在定義時候被初始化。
所以 const int i; //錯誤的,i 必須被初始化 (在c中這種寫法可以,但是這裡只說c++的環境下)
#include
intmain()
2. 代替#define的值替換功能
舉例:
#define number 100
上面這行**是c中典型的值替換手段。
但是c++中這樣寫:
const number =
100;
//或者
const
int number =
100;
這樣寫的好處:
①.明顯的減少**量
②.const可以附帶資料型別(int),但是#define(巨集常量)沒有該功能,只是簡單的字元替換,沒型別檢查,所以在字元替換的時候會出意想不到的錯誤。
3.指標和const
在指標的宣告中,指向const物件的指標和const指標是不一樣的。
舉例:
//注意!!p可以不初始化,它可以指向任何東西。p這個指標指向乙個int型別的數,但是這個數是const屬性。
const
int* p;
//等價於
intconst
*p;//下面的p是個const修飾的指標,所以p必須被初始化。 但是這個p指向的值可以被改變。
int a =1;
int*
const p =
&a;*p =2;
//改變p所指向的值,正確。
4.修飾函式引數及函式返回值
①const修飾成員函式
class
a;
const改變的是this指標。this指標原型別為: a* const(this為類a的指標,我理解為a* const this),被const修飾後變為:const a* const,(第乙個const修飾的就是this指向的物件,我理解為 const a* const this)。
const修飾的成員函式不能呼叫或者修改該類的物件。當然mutable成員可以。
再記最重要的一點:const修飾的成員函式的應用場景。
const物件,指向const物件的指標都且只能呼叫const成員函式。呼叫非const成員函式則會出錯。反過來,非const物件或者指標,都可以呼叫const成員函式和非const成員函式。所以,如果乙個類中沒有const成員函式,當你使用const物件時,這個物件誰都呼叫不了。
舉例:
class
aconst a a1;
//a1物件只可以呼叫fun1成員函式。
const a* a2 =
new a;
//a2指標的呼叫規則也是只可以呼叫fun1函式。
class
b b b1;
//b1可以呼叫bfun1和bfun2
const b b2;
//b2呼叫不了任何成員函式
b* b3 = b2;
//b3是指向const物件b2的指標,也呼叫不了任何成員函式
b& b4 = b2;
//b4是const修飾的b2物件的引用,也呼叫不了任何成員函式。
//總結:無論是const物件(b2),還是指向b2的指標b3,還是b2的引用b4,都無法呼叫非const成員函式。
classc
c c;
c.cfun1()
;//正確
c.cfun2()
;//正確
//總結:非const修飾的物件,可以呼叫const成員函式和非const成員函式。
②const修飾資料成員
const修飾資料成員,記住一點:必須在構造中初始化成員變數。
#include
class
a a a;
//此處想要構造乙個物件a,但是程式不會執行。
//因為const修飾的成員變數m_b必須在構造的初始化列表中進行初始化
//修改如下:
class
a//初始化時,初始化const修飾的成員變數,這樣就可以了。
int m_a;
const
int m_b;
}
待續… const關鍵字應用
const關鍵字應用 欲阻止乙個變數被改變,可使用const,在定義該const變數時,需先初始化,以後就沒有機會改變他了 對指標而言,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const 在乙個函式宣告中,const可以修飾形參表明他是乙個輸入引數,在函式...
C中const關鍵字
const 用法 定義常量,修飾指標 函式的輸入引數和返回值,把定義或者修飾的變數屬性設為唯讀。本質上它只是在全域性資料段或者棧中定義的是乙個唯讀的常量,不是真正位於字串常量區。所以關鍵字const 並不能把變數變成真正的常量,事實上還是可以改變 const 定義的變數的值。const 的目的是為了...
C 中const關鍵字
一 const修飾指標變數 int num 0 1.const在 前面,表示const修飾指標指向的內容 const int p intconst p 2.const在 後面,表示const修飾指標變數 int const p 二 const修飾成員函式首先來看一下普通成員函式 class a fu...