顶层const:表示指针本身为常量。
底层const:表示指针所指向的对象为一个常量。
且指针类型即可以是顶层const 也可以是 底层const
int i = 0;
int const* p1 = &i; // p1不能被改变,其为顶层const
int const p2 = 4; // p2不能被改变,为顶层const
int cosnt *p3 = &p2 // p3能被改变,为底层const
const int *const p4 = p3; // 第一个const为底层cosnt 第二个const为顶层const ,此处p4即是顶层const也是底层const。
在执行拷贝操作时,顶层const不受影响,但是底层const受影响很大,对底层const的拷贝操作,考入和考出的对象都必需要具有相同的底层const的资格。
int *p = p4 // 错误操作,p4包含了底层const含义,所指对象为const int,而p为普通int
而:
p3 = p4 // 正确,均为底层
额外的,在c++11中,对一个确定的常量表达式可以使用constexpr来声明变量。