用名词顶层const表示指针本身是个常量,而用底层const表示指针所指的对象是一个常量. - 《C++ Primer 5th》

看下面的代码:

int a = 0;
int b  = 1;
const int *p = &a;
int *const t = &b;
cout << *p << endl;
cout << *t << endl;

//*p = 5; //这是不允许的
p = &b;

*t = 5;
//t = &a; //这也是不允许的

cout << *p << endl;
cout << *t << endl;

怎么理解呢,首先第一个const修饰的是int,不是变量p,代表了不能修改它所指向的变量的值,但是p是可变的,所以可以更改它所指向的变量,那么它本身就不是一个常量,所以它是一个底层const.
第二个const修饰的是t,所以t变量本身就是一个常量,所以她就是一个顶层const.

更一般的,顶层const可以表示任意的对象是常量这一点对任何数据类型都适用,如算术类型,类,指针等.底层const则与指针和引用等复合类型的基本类型部分相关.- 《C++ Primer 5th》

int i = 0;
int *const p1 = &i; //底层const
const int ci = 42; //顶层const
const int *p2 = &ci; //底层const
const int * const p3 = p2; //靠右为顶层,靠左为底层const
cosnt int &r = ci; //声明引用的const都是底层const

有何作用呢?
当执行拷贝操作时,两者有明显区别(顶层const不受影响).具体参考《C++ Primer 5th》.

最后修改:2019 年 08 月 15 日
如果觉得我的文章对你有用,请随意赞赏