作用:可以定義一個變量,不會因爲程序的其他因素而改變其值,可以使用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