顶层const
定义:指针本身是一个常量,就是说,常量指针,p是常量,*p是可修改的
底层const
定义:指针指向的对象是一个常量,就是说*p是常量,而p是变量,*p只读,p可以修改
判断底层和顶层const
最主要是用黄体字的定义去判断,指针和引用比较类似,都差不多
举个例子:
int i = 0 ;
int * const p1 = &i;定义了一个常量指针,是顶层const
const int *p2 = &i; 定义了一个指针,*p2是只读,p2是变量,指针指向的对象是常量,所以是底层const
顶层const和底层const的意义:
C++:我不管这个数据是不是顶层const,复制数据的时候,两个变量一定要都要是底层const
比如:
const int value = 1;
const int & a = value;(a指向的对象是常量)都具有底层const,所以把a绑定到value上没有问题(a指向了value)
int b = a;b是没有底层const,a是具有底层const,将导致编译错误
典型的编译报错:丢失标识符const
我以前写的一篇文章也有这个内容的,
error: binding reference of type int& to const int discards qualifiers