天天看點

const、指針常量和常量指針的解釋

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資格或者兩個對象的資料類型必須能夠轉換。

一般來說,非常量可以轉化為常量。

繼續閱讀