C++ primer中解释道:
顶层const表示指针本身是个常量。
底层const表示指针所指的对象是一个常量。
const int ci = 42; //不能改变p1的值,这是一个顶层const
int *const p1 = 45; //不能改变p1的值,这是一个顶层const
const int *p2 =&ci; //允许改变p2的值,这是一个底层const
如何区别顶层和底层 const 呢?
在*左边的const为底层const,而在*右边的const则为顶层const。
如何解读const int *p2和int *const p1呢?
第一个,从右往左看,p2是一个int型的指针,而指针中存放着一个常量,所以p2是一个指着常量的指针,为底层const。
第二个,从右往左看,p1是一个常量指针,而指针是一个int型,所以p1是本身是一个常量指针,为顶层const。