c++11 顶层const和底层const:
//C++中的顶层const和底层const都是指const修饰的对象或指针。
//顶层const指的是:const修饰的 对象本身 是不可修改的,但是可以修改指向该对象的指针。例如:
const int a = 10; // a是顶层const
int* p = &a; // 错误,不能将const int*转换为int*
const int* p = &a; // 正确,p是指向const int的指针,可以指向a
*p = 20; // 错误,a是const int类型,不可修改
p = nullptr; // 正确,p本身不是const,可以修改
//底层const指的是:const修饰的 指针指向的对象 是不可修改的,但是指针本身可以修改。例如:
int a = 10;
int b = 20;
int* const p = &a; // p是底层const,指向a,不可修改
*p = 30; // 正确,a的值被修改为30
p = &b; // 错误,p是const指针,不可修改
//需要注意的是,顶层const和底层const可以同时存在,例如:
const int* const p = &a; // p是指向const int的const指针,不可修改指向的对象和指针本身