最近一直在看《C++ Primer》,于是对书中的部分内容做了总结。

顶层const和底层const的概念

顶层const(top-level const):表示指针本身是一个常量。 底层const(low-level const):表示指针所指的对象是一个常量。

举个例子:

1
2
3
4
5
6
7
8
9
10
int i=0;

int *const p1=&i; //顶层const,p1的值不能改变

const int ci=1; //顶层const,ci的值不能改变

const int *p2=&ci; //底层const,p2的值可以改变

const int *const p3=p2; //靠右的为常量指针,顶层const,靠左的为底层const,所以p3既是顶层const,又是底层const

个人总结:

  • 用于声明变量和作为const指针的为顶层const
  • 用于声明引用和指针的为底层const
  • 在执行对象的拷贝操作时,顶层const不受影响。
  • 当一个对象既是顶层const,又是底层const,拷贝时必须清楚它指向的对象必须是常量。