C++中的顶层const

//顶层const表示指针本身是一个常量
//底层const表示指针所指对象是一个常量
int main()
{
	int i = 0;
	int *const p1 = &i;//不能改变p1的值,p1是一个顶层const
	const int ci = 42;//不能改变ci的值,ci是一个顶层const
	const int *p2 = &ci;//允许改变p2的值,这是一个底层const
	const int *const p3 = p2;//左边的const是底层const,右边的const是顶层const,p3是指向常量对象的常量指针
	const int &r = ci;//用于声明引用的都是底层const

	//当对象执行拷贝操作时
	//顶层const不受什么影响,因为不会改变被拷贝对象的值,拷入拷出的对象是否是常量都没有什么影响
	i = ci;
	p2 = p3;//它们有同样的底层const,p3还有顶层const但是没有影响
	//底层const存在一些限制
	//拷入拷出的对象必须拥有相同的底层const资格或者两个对象的数据类型必须可以转换
	//一般而言,非常量可以转换为常量,反之不行
	int *p = p3;//非法,p3有底层const定义,p没有
	p2 = &i;//正确,int*可以转换为const int*
	int &r = ci;//错误,普通int不能绑定到int常量上
	const int &r2 = i;//正确,int常量可以绑定到普通int上

	//练习
	//判断下列对象被声明成了底层还是顶层const
	const int v2 = 0;//顶层const
	int v1 = v2;
	int *p1 = &v1, &r1 = v1;
	const int *p2 = &v2;//底层const
	const int *const p3 = &i;//左边const是底层const,右边const是顶层const
	const int &r2 = v2;//底层const

	//下列语句是否合法
	r1 = v2;//合法,v2是顶层const
	p1 = p2;//非法,p2有底层const而p1没有
	p2 = p1;//合法,int*可以转换为const int*
	p1 = p3;//非法,p3有底层const而p1没有
	p2 = p3;//合法,p2和p3都有底层const
	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值