“試圖將一個非const對象的指針指向一個常量對象”的動作都將引起編譯錯誤,const對象的地址只能賦值給指向const對象的指針,但是指向const對象的指針可以被賦以一個非const對象的地址。
注意這三者區別:
- /* 指向double類型的,定義成const對象的指針 */
- const double *pc = 0;
- const double minWage = 9.60;
- pc = &minWage;
- /* 指向int類型的const指針 */
- int errNumb = 0;
- int *const curErr = &errNumb;
- /* 指向double類型的,定義成const對象的const指針 */
- const double pi = 3.14159;
- const double *const pi_ptr = π
這段代碼:
- using namespace std;
- const int ival = 1024;
- const int *const &pi_ref = &ival;
- int _tmain(int argc, _TCHAR* argv[])
- {
- return 0;
- }
如果這樣定義就會出錯:
- const int *&pi_ref = &ival;
定義int*爲T,上面的代碼等價於:
- const T &pi_ref = &ival;
編譯器會這樣來處理這段賦值計算:
- T temp;
- temp = &ival;
- const T &pi_ref = temp;
這裏temp是"int *"類型,編譯器不能強制把"const int *"轉變爲"int *"類型,原程序沒有問題,是因爲編譯器這樣處理了,定義"const int *"爲T:
- T temp;
- temp = &ival;
- T const &pi_ref = temp;
這樣就解決了之前類型不匹配的賦值問題。