1、顶层const表示对象本身是常量,这一点对任何数据类型都适用。对于指针,它表示指针本身是一个常量(常量指针)。
2、底层const与指针和引用等复合类型的基本类型部分有关。对于指针,它表示指针所指的对象是一个常量(指针常量)。声明引用的const都是底层const。
3、当执行拷贝操作时,,常量是顶层const还是底层const区别明显。
3.1、顶层const在拷贝时没有什么限制。因为拷贝操作并不会改变被拷贝对象的值。因此,拷入和拷出的对象是否是常量都没什么影响。
3.2、对于底层const,当执行拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据必须能够转换。一般来说非常量可以转换成常量,反之则不行。
int i=5;
const int *p1=&i; //p1有底层const定义
int *p2=p1;//错误p2,没有底层const资格