const關鍵字 一個例子



“試圖將一個非const對象的指針指向一個常量對象”的動作都將引起編譯錯誤,const對象的地址只能賦值給指向const對象的指針,但是指向const對象的指針可以被賦以一個非const對象的地址。

注意這三者區別:
C++代碼 複製代碼
  1. /* 指向double類型的,定義成const對象的指針 */  
  2. const double *pc = 0;   
  3. const double minWage = 9.60;   
  4. pc = &minWage;   
  5. /* 指向int類型的const指針 */  
  6. int errNumb = 0;   
  7. int *const curErr = &errNumb;   
  8. /* 指向double類型的,定義成const對象的const指針 */  
  9. const double pi = 3.14159;   
  10. const double *const pi_ptr = π  


這段代碼:
C++代碼 複製代碼
  1. using namespace std;   
  2. const int ival = 1024;   
  3. const int *const &pi_ref = &ival;   
  4. int _tmain(int argc, _TCHAR* argv[])   
  5. {   
  6.     return 0;   
  7. }  


如果這樣定義就會出錯:
C++代碼 複製代碼
  1. const int *&pi_ref = &ival;  


定義int*爲T,上面的代碼等價於:
C++代碼 複製代碼
  1. const T &pi_ref = &ival;  


編譯器會這樣來處理這段賦值計算:
C++代碼 複製代碼
  1. T temp;   
  2. temp = &ival;           
  3. const T &pi_ref = temp;  


這裏temp是"int *"類型,編譯器不能強制把"const int *"轉變爲"int *"類型,原程序沒有問題,是因爲編譯器這樣處理了,定義"const int *"爲T:
C++代碼 複製代碼
  1. T temp;   
  2. temp = &ival;           
  3. const &pi_ref = temp;  


這樣就解決了之前類型不匹配的賦值問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章