一、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物件通常只在...