顶层const和底层const

1.顶层const和底层const

顶层const:本身是一个常量

底层const:所指的对象是一个常量

2.例子

int *const p1 = &i;

const修饰p1,p1本身是一个const,所以这个const是顶层const

const int ci = 42;

const修饰ci,ci本身是一个const,顶层

const int *p2 = &ci;

const修饰*p2,修饰的是p2所指的对象,所以是一个底层const

const int *const p3 = p2;

第一个const修饰*const p3,为const p3所指的对象,所以为底层

第二个const修饰p3,则p3本身为const,这个const为顶层const

3.常量表达式constexpr

限定符constexpr只对指针有效,与指针所指的对象无关

const int *p = nullptr;

const修饰p所指的对象,所以为底层const

constexpr int *q = nullptr;

由于constexpr只修饰指针,所以q为一个常量,故为顶层const

4.类型别名typedef

typedef char *pstring;
const pstring cstr = 0;

const修饰cstr,cstr本事为一个常量,所以为一个顶层const

不能将类型别名替换成原来的样子

const char *cstr = 0;

此时const修饰cstr所指的对象,这时的const是一个底层const,而用类型别名所定义的是一个顶层const

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值