“试图将一个非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 = π
/* 指向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;
- }
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;
const int *&pi_ref = &ival;
定义int*为T,上面的代码等价于:
- const T &pi_ref = &ival;
const T &pi_ref = &ival;
编译器会这样来处理这段赋值计算:
- T temp;
- temp = &ival;
- const T &pi_ref = temp;
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;
T temp; temp = &ival; T const &pi_ref = temp;
这样就解决了之前类型不匹配的赋值问题。