const 限定符,定義的值不可以被修改。是以必須進行初始化。
1.必須進行初始化。
const int i = 3;//編譯時初始化
const int i = GetSize();//運作時初始化
2.初始化完成後,任意給const變量進行指派的操作都将引發錯誤。
const int i = 3;//編譯時初始化
i= 5;//錯誤
3.預設狀态下,const對象僅在檔案内有效,多檔案共享可使用extern
const的引用
1.引用及其對應的對象都是常量
const int c = 1024;
const int &r = c; //正确
2.引用的對象可以是普通對象
int c = 1024;
const int &r = c;//正确
//注意:普通非常量引用不能綁定常量
const int c = 1024;
int &r = c;//錯誤
const 的指針(參考c++ primer)
注:感覺與網上很多部落格了解的不太一樣,希望各位大佬多多指正。
指針常量 - 指向常量的指針,不能用于改變其所指對象的值
const double pi = 3.14;
const double *cptr = π//正确
*cptr = 20;//錯誤,所指對象的值不能改變
double dval = 3.14;
cptr = &dval;//正确,運作指向常量的指針,指向一個非常量對象
const double pay[3] = {1.11,2.22,3.33}; // const double 的數組,這意味着數組中的每個元素都是 一個 const double,編譯器不會允許程式員編寫改變數組内容的代碼
常量指針 必須初始化,初始化完成,則它的值(也就是存放在指針中的那個位址)就不能再改變了。
把*放在const關鍵字錢,說明指針就是一個常量。
int errNum = 0;
int *const curErr = &errNum;
*curErr = 0;//正确,将指針指向的對象重置
頂層const和底層const
頂層const 表示指針本身是個常量,更一般的,可以表示任意的對象是常量,這一點對任何資料類型都适用,如算術類型、類、指針等。
底層const 表示指向的對象是一個常量,與指針和引用等複合類型的基本類型部分有關。比較特殊的是,指針類型既可以是頂層const也可以是底層const。
int i = 0;
int *const p1 = &i; //不能改變p1的值,頂層const
const int ci = 42; //不能改變ci的值,頂層const
const int *p2 = &ci; //運作修改p2的值,底層const
const int *const p3 = p2; //右是頂層,左是底層
const int &r = ci; //聲明引用都是底層
注意:執行對象拷貝操作時,頂層const基本不受影響,但是底層const在拷入與拷出時必須具備相同的底層const資格或者兩個對象的資料類型必須能夠轉換。
一般來說,非常量可以轉化為常量。