顶层const和底层const

本文详细解释了C++中顶层const与底层const的区别,并通过具体示例进行说明。此外,还介绍了常量表达式constexpr的使用特点及类型别名typedef在const修饰下的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值