- const的作用是使对象至少在运行期间是常量
- 首先const并非只有两层,如:const int *const*const*const p=nullptr;其实也无需多的抠概念只要知道哪个const修饰的是哪个对象,它的作用是什么,自然就知道很清楚了
- 1. 永远从右往左读一个变量声明。
2. const永远修饰const出现地点左边的声明类型。
3. 如果左边没有声明类型,就修饰右边。
- 举例:const int * const p=nullptr; 红const修饰int * 即p是常量,蓝const 修饰int 即*p是常量
- 或者可以这么理解:const int *** const cptr=nullptr;
可以解释为:const<Ptr<Ptr<Ptr<const<int>>>>> cptr=nullptr;
- 这样也就容易理解typedef 定义的指针常量
如:typedef const char * ccptr;
那么const ccptr cptr=nullptr; 可以理解为 const<ccptr> cptr=nullptr;
然后const<Ptr<const<char>>> cptr=nullptr;因为ccptr 是一个类型,先按普通类型计算,再替换。
那么const ccptr * cptr = nullptr;可以解释为:Ptr<const<ccptr>> cptr=nullptr;->
Ptr<const<Ptr<const<char>>>> cptr=nulllptr; 即cptr是const char * const *类型
即cptr是一个指向 指针常量 的 指针常量 ,*cptr 不可修改,**cptr也不可修改,cptr可修改。
- 引用不是对象,没有顶层const
参考:https://www.zhihu.com/question/24785843