C 中const關鍵字修飾

2021-09-02 22:10:18 字數 3064 閱讀 6695

2.const應用到函式中

3. 類中定義常量(const特殊用法)

4.const定義常量物件,以及常量物件的用法

const名叫常量限定符,用來限定特定變數,以通知編譯器該變數是不可修改的。習慣性的使用const,可以避免在函式中對某些不應修改的變數造成可能的改動。

c++中const的主要用法大致上可以分為以下幾類:

主要是修飾值變數、reference、pointer

比如:

const

int a =10;

const

int arr[3]

=;

對於類似這些基本資料型別,修飾符const可以用在型別說明符前,也可以用在型別說明符後,其結果是一樣的。在使用這些常量的時候,只要不改變這些常量的值便好。

const修飾指標(*)

這裡有一些實際的示例:

int x=

100;

const

int* a1 =

&x;//[1]

intconst

* a2 =

&x;//[2]

int*

const a3 =

&x;//[3]

const

int*

const a =

&x;//[4]

《effective c++》item21上的總結非常直觀明了。

根據這條規律,[1]和[2]兩條中,const位於星號的左側,所以const含義是修飾變數a1和a2指標指向的內容是常量,也就是不能做 *a1 = 1或則 *a12 = 1這種類似操作,編譯器會報錯。

[3]為指標本身是常量,而指標所指向的內容不是常量,這種情況下不能對指標本身進行更改操作,如a++是錯誤的.

[4]為指標本身和指向的內容均為常量。

const修飾reference(&)

同樣給出一些示例:

int x =

100;

intconst

&a=x;

//[1]

const

int&a=x;

//[2]

int&

const a=x;

//[3]這種方式定義是c、c++編譯器未定義,雖然不會報錯,但是該句效果和int &a一樣。

對於[1]和[2]這兩種定義方式是等價的,此時的引用a的值不能被更新。如:a++ 或則給a賦值這是錯誤的。

const在函式中的應用主要有三點:

不管是作為函式引數的const修飾符還是返回值的修飾符,其實際含義都是一樣的。

const修飾函式引數

比如:void fun0(const a* a ); 或則 void fun1(const a& a);

呼叫函式的時候用相應的變數初始化const常量,則在函式體中,按照const修飾的部分進行常量化。

比如const a* a 則不能對傳遞進來的指標指向的內容修改,保護原指標所指向的內容;

比如const a& a則不能對傳遞進來的引用物件的內容修改,保護原引用物件所的內容。

注意:引數const通常用於引數為指標或引用的情況。

const修飾函式返回值

修飾返回值的const,如const a fun2( ); const a* fun3( );

這樣宣告了返回值後,const按照"修飾原則"進行修飾,保護函式返回的指標指向的內容或則引用的物件不被修改。

const修飾函式

const作用於函式還有一種情況是,在函式定義的最後面加上const修飾,比如:

a fun4() const;

其意義上是不能修改除了函式區域性變數以外的所在類的任何變數。

我們要想在類中實現常量定義大致上有幾種實現方式

1.使用列舉型別

class

test

;//列舉常量

int array1[size1]

;int array2[size2]

;}

2.使用const

不能在類宣告中完成初始化const資料成員。以下用法編譯器會報錯,因為類物件未被建立時,編譯器不知道size的值是什麼。

// 錯誤例項

class

test

正確使用const用法是:const資料成員的初始化只能在類建構函式的初始化表中進行。

classa;

a::a

(int size)

:size

(size)

// 建構函式的初始化表

//error 賦值的方式是不行的

a::a

(int size)

void main()

注意:對const成員變數的初始化,不能在變數宣告的地方,必須在類的建構函式的初始化列表中完成,即使是在建構函式內部賦值也是不行的。

3.使用static const

通過結合靜態變數來實現:

class

year};

intconst year::inity=

1997

;//靜態變數的賦值方法,注意必須放在類外定義

void

main()

到這裡就把在類中定義常量的方法都陳列出來了。

對於不管是標準庫中的物件或則是我們自定義的物件,如果我們定義的是const物件,那麼對於const物件只能呼叫const修飾的函式,其餘的函式都不能呼叫。

如下例子:

class

test

~test()

void

set(

int yy)

intgetx()

const

const

int x;

int y;};

void

main()

const關鍵字修飾類

include using namespace std if 0 1 const修飾資料成員 成員函式 類物件 2 修飾資料成員的時候 只能在形參列表裡面初始化。被const修飾的資料成員,不能被修改 3 修飾成員函式 位置 函式宣告之後,實現體之前。要求在宣告和定義處都要有const 意義 con...

C語言const關鍵字修飾指標

const int p p 可變,p 指向的物件不可變 int const p p 可變,p 指向的物件不可變 int const p p 不可變,p 指向的物件可變 const int const p 指標p 和p 指向的物件都不可變 在平時的授課中發現學生很難記住這幾種情況。這裡給出乙個記憶和理...

C中const關鍵字

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