C 中const限定符的理解

2021-08-22 03:18:30 字數 1875 閱讀 2350

一、const變數

1、建立之後不可修改

有時候我們定義乙個變數,並且不希望程式其他部分改變它,可以用const對這個變數進行修飾。

const

int a=520;

a=23;

如上,a被定義成const型別,如果再對a重新賦值,會出現assignment of read-only variable 『a』的錯誤,表明a是唯讀變數,不能夠被修改。

2、建立時候必須初始化

再者,由於const物件建立之後不可修改,所以在建立它的時候就必須對其進行初始化。

const

int a;

如果不小心未初始化會出現uninitialized const 『a』錯誤。

3、只在當前檔案有效

編譯器在編譯程式時,會對出現const限定符的變數用具體的數值做替換。如果程式中包含不止乙個檔案,多個檔案需要共享這個變數,就必須在編譯期知道這個變數的初始值。為了實現這點,一種做法是在每個檔案定義,另外一種做法就是在const之前加上extern,這樣就能夠避免重複定義。

extern

const

int a=520;

二、常量引用

1、不能用乙個非常量物件給乙個常量物件設定引用。

如下操作將會出現錯誤:

const

int a=520;

int &b=a;

這是因為如果這樣操作成立的話意味著可以通過b來對a進行修改。

2、可以給字面值常量設定引用

通常情況下,引用必須引用乙個具體的物件,如果要這麼做的話可以在之前加上const。

int &i=42;  //錯誤

const

int &i=42; //正確

3、引用型別要匹配

引用物件和被引用物件型別要一致。

double b=2.34;

const

int &a=b; //錯誤

之所以不能這麼做的原因是,在進行第二步的時候會發生型別轉換,生成乙個臨時變數然後再發生繫結。

const

int temp= b;

const

int &a=temp;

如果沒有加const限定符,意味著可以通過a修改臨時變數的值,這麼做是不合法的。

三、const與指標

1、常量指標

含義是指標本身是乙個常量,當用它指向乙個物件後,就不能再指向另乙個物件。

int a=12;

int b=15;

int *const p=&a;

p=&b; //錯誤

2、指標常量

含義是,指標指向的是乙個常量,不能通過解引用去修改這個常量。

int a=12;

intconst* p=&a;

*p=5; //錯誤

記憶這兩者,可以從右往左讀,如離p最近的是*,然後是const。

四、底層const和頂層const

底層和頂層const是相對於指標來說的。當指標指向的是乙個常量時候,用底層來表示,反之,如果指標本身是乙個常量的時候,用頂層來表示。

int a=23;

intconst *p1=&a; //指標常量,底層const,p1指向的內容不可變

int *const p2=&a; //常量指標,頂層const,p2不能夠再再指向另乙個物件

int *const *p3=&a; //p3不能指向其他物件且指向的內容不可被改變

C 的const限定符

const限定符總是讓人很頭疼,下面講解一下幾個比較容易混淆的概念 對常量的引用 常量引用 一般情況下,引用的型別要與其所引用的物件的型別一致,其中的例外情況就是,當初始化常量引用時,允許用任意表示式作為初始值,只要改表示式能轉換成引用的型別即可。const int i 1 const int ri...

C 的const限定符

一 const常量 const int a 123 編譯時初始化 const int a get size 執行時初始化 a 111 錯誤,a是常量物件,不能改變了 const int b 錯誤 二 對const和const引用的初始化 初始化常量或常量引用時允許用任意表示式作為初始值,只要該表示式...

C 之const限定符

const的特點 用const加以限定的變數,無法改變。由於const物件定義之後就無法改變,所以必須對其進行初始化。const物件的常量特徵僅在嘗試改變它的時候表現出來,其他時候和變數無異。const初始化 const int bufsize 512 bufsize無法再改變const物件通常只在...