c++ primer中对于“常量指针”的定义和网上的版本相反,而且删去了"指针常量"的概念,引入了一个新的概念——"指向常量的指针”,但各种类型的含义还是一致的,只是叫法不一样了。举例:
int a;
const int *p = &a;
//与int const* p = &a等效,只取决于*和const的相对位置
表示的是“指向常量的指针”,普遍的叫法是“常量指针”。
这是指针p指向的对象是一个整型常量,指向的对象是不可以改变的,但对指针p本身并没有限制,p的值可以改变,也就是可以指向新的对象。
修改:上一句“指向的对象是不可以改变的”这句话有失偏颇,“指向常量的指针,不过是指针‘自以为是’罢了,它们觉得自己指向了常量,仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其他途径改变。”(同样适用于常量引用)
int a = 0;
int *const p = &a;
按照c++primer 第五版的定义,p是一个“常量指针”,这里与网上普遍的说法也不一样,那里叫“指针常量”。
const紧挨着p表示p的值不可改变,即p始终指向a。但是指向的对象的值能否改变依赖于对象本身的类型,这里的a非常量,a的值是可以改变的。