顶层const与底层const

2017年10月7日 2543点热度 0人点赞 0条评论
  • 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

icebmji

这个人很懒,什么都没留下