C 中const關鍵字

2021-08-22 19:10:57 字數 1996 閱讀 9174

一:const修飾指標變數

int num =0;
1.const在 * 前面,表示const修飾指標指向的內容

const

int* p = #

intconst* p = #

2.const在 * 後面,表示const修飾指標變數

int* const p = #
二:const修飾成員函式首先來看一下普通成員函式:

class a

......

};

fun函式其實是有引數的,寫出來就是:

void fun(a* this)

{}

只不過this指標是不能顯示得寫。

如果把fun函式後面加上const,則fun函式變成了乙個const成員函式:

void fun() const

{}

這裡的const修飾的就是this指標,寫出來就是:

void fun(const a* this)

{}

由於const在 * 前面,表示const修飾指標指向的內容,所以const成員函式表示該函式不可對類物件的非靜態成員變數進行修改。但是如果在非靜態成員函式前面加上mutable關鍵字,則表示釋放掉了它的不可修改約束,也就是說,const成員函式可以修改被mutable修飾的非靜態成員函式。

再來看乙個例子:

......

void f1()

void f2() const

......

我個人是這樣理解的:

因為const成員函式時一種特殊的成員函式,是所以成員函式的子集。

再看乙個例子:

const a a;

const成員物件不能訪問非const成員函式。

a.f2();//

const物件可以訪問const成員函式

總結一下關於const成員函式:

1.不可對類物件的非靜態成員變數修改,但是如果非靜態成員變數加了mutable,const成員函式就可以修改。

2.非const成員函式可以呼叫const成員函式,但是const成員函式不能呼叫非const成員函式。

3.const物件可以訪問const成員函式,不能訪問非const成員函式。

三:const物件

上面說到:const物件可以訪問const成員函式,不能訪問非const成員函式。

再看乙個例子:

class a;

int main()

{ const a a;

a._x = 1;//const物件可以修改用mutable修飾的成員變數

//a._y = 2;//const物件可以訪問普通成員變數,但不可以修改普通成員變數

......

總結const物件:

1.const物件可以訪問const成員函式,不能訪問非const成員函式。

2.const物件可以修改用mutable修飾的成員變數;const物件可以訪問普通成員變數,但不可以修改普通成員變數。

四:const成員變數

1、類的const成員變數必須在建構函式的引數初始化列表中進行初始化。

2、建構函式內部,不能對const成員賦值,編譯器直接報錯。

3、建構函式列表初始化執行順序與成員變數在類中宣告相同,與初始化列表中語句書寫先後無關。

C中const關鍵字

const 用法 定義常量,修飾指標 函式的輸入引數和返回值,把定義或者修飾的變數屬性設為唯讀。本質上它只是在全域性資料段或者棧中定義的是乙個唯讀的常量,不是真正位於字串常量區。所以關鍵字const 並不能把變數變成真正的常量,事實上還是可以改變 const 定義的變數的值。const 的目的是為了...

C 中」const「關鍵字

關於c 中的const關鍵字的用法非常靈活,而使用const將大大改善程式的健壯性,現將本人的一些體會總結如下,期望對大家有所幫助 一 丶const基礎 如果const關鍵字不涉及到指標,我們很好理解,下面是涉及到指標的情況 int b 500 const int a b 1 int const a...

c 中const關鍵字

關於const關鍵字,有幾個注意點。首先是把引用繫結到const物件上,與普通引用不同,對常量的引用不能被用來修改它所繫結的物件。const int ci 1024 const int r1 ci 正確 引用及其對應的物件都是常量 r1 42 錯誤 r1是對常量的引用,不可修改 int r2 ci ...