const 限定符

作用:可以定義一個變量,不會因爲程序的其他因素而改變其值,可以使用const 對變量的類型加以限定

因爲當變量被const加持的時候,值的大小就已經限定好了,所以創立行const的變量的時候必須初始化:

const int j = 42;// 正確,因爲有對 j 進行初始化, 經過初始化,不能對j的值進行改變

const int k; // 錯誤, 因爲並沒有對k進行初始化


文件之間共享const 對象:

若需要在多個文件之間共享const對象,則在文件聲明中加上"extern" 即可,

例如: 

在 file1.cpp 中:

extern const int bufSize = fcn();

在 file1.h 中:

extern const int bufsize;


const 的引用:

若需要把引用綁定在const變量上,需要這個引用也是const類型:

例如:

const int ci = 1024;

const int &r1 = ci; //必須用此種方法來進行引用,前面要加const,此種情況下,不允許改變r1的值來改變ci的值。

                         // 若爲 int &r2 = ci; 則不正確, 因爲並不是一個常量引用

但是可以將常量直接綁定在const引用上, 例如:

int i = 42;

const int &r1 = i;

const int &r2 = 42;


指針與const

若想存放常量對象的地址,只能使用指向常量的指針:

const double pi = 3.14 //pi 是一個常量

const double *cptr = &pi //正確,因爲cptr是一個const指針, 若爲普通指針,則不能用來指向pi

有一種例外:const指針可以指向非const的變量:

double dval = 3.14;

cptr = &dval;

常量指針一旦被初始化,則其指向的地址也就不能被改變:

int errNumb = 0;

int *const currErr = &errNumb; //currErr 將一直指向errNumb,但是errNumb的值還是可以通過其他方法改變的,因爲                                                        //errNumb 並不是一個const變量.

tip:從右往左看比較容易理解

頂層const

不可改變(星號放在const之前的是頂層const(top-level const)),放在之後的是底層const(low-level const)例如:

int i = 0;

int *const p1 = &i; //top-level const 不能改變p1的值

const int ci = 42; // 不能改變ci的值,top-level const

const int *p2 = &ci; // 可以改變p2的值,low-level const



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章