const限定符總是讓人很頭疼,下面講解一下幾個比較容易混淆的概念:
對常量的引用(常量引用):
一般情況下,引用的型別要與其所引用的物件的型別一致,其中的例外情況就是,當初始化常量引用時,允許用任意表示式作為初始值,只要改表示式能轉換成引用的型別即可。
const
int i =1;
const
int&ri = i;
int i =42;
const
int&r1 = i;
const
int&r2 =
42;
指向常量的指標
和引用類似,一般情況下,指標的型別應該與其指向的物件的型別一致,但是允許乙個指向常量的指標指向乙個非常量物件。
const
int i =4;
const
int*cptr =
&i;int a =1;
cptr =
&a;
常量指標
由於指標本身就是乙個物件,因此可以定義乙個指標為常量指標,必須被初始化。當常量指標指向乙個物件時,那麼這個指標永遠只能指向這個物件,但是被指向的物件的值能否改變,取決於被指向的物件本身是否是乙個常量。
int i =1;
int*
const cp =
&i;//cp永遠指向i,
i =2
;//由於i是非常量,其值可以改變
const
int c =2;
const
int*
const p =
&c;//p是乙個指向常量的常量指標
c =1
;//錯誤,c為常量,其值不能被改變
p =&i;
//錯誤,p是乙個常量的指標,其指向不能改變
頂層const與底層const
頂層const表示指標本身就是乙個常量,而底層const表示指標所指的物件是乙個常量。
int i =0;
int*
const pi =
&i;//pi的值不能被改變,pi為頂層const
const
int ci =42;
//ci是乙個int型別的常量,值不能被改變,為頂層const
const
int*p2 =
&ci;
//p2是乙個指向常量的指標,p2的值可以改變,所以p2為底層const
const
int*
const p3 = p2;
//靠右的const是頂層const,靠左的const是底層const
const
int&r = ci;
//用於宣告引用的const都是底層const
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物件通常只在...
關於const 限定符
很多引用自c primer一書 比如有時候需要將乙個文字中的資料複製到另外乙個文字。我們需要使用緩衝區,緩衝區的大寫我們可以自己來決定比如1024個位元組,這是乙個常量,我們使用bufsize 1024.但是bufersize物件本身是乙個變數。所以我們可以引入const限定符,它將乙個物件轉化為常...