C++primer1-7章知识点总结——顶层const与底层const

顶层const表示任意对象/数据类型本身为常量

底层const与指针和引用等复合类型的基本类型有关

注:
(1)用于声明引用的const都是底层const
(2)指针类型既可以是顶层const也可以是底层const

eg:

int i = 0;
int *const p1 = &i; //p1为顶层const,其值不能改变
const int ci = 42;  //ci为顶层const,其值不能改变
const int *p2 = &ci; //允许改变p2的值,这是一个底层const
const int *const p3 = p2; //靠右的为顶层const,靠左的为底层const
const int &r = ci; //用于声明引用的都为底层const

注:底层const的限制:
当执行拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者,两个对象的数据类型必须能够转换。一般来说非常量可以转换为常量,反之则不行。

具体操作实例:
eg:

i = ci; //正确,ci顶层const不受影响
p2 = p3;//正确,p2和p3指向的对象都相同,且p3又是一个顶层const其本身也为常量
int *p = p3; //错误,p3包含底层const定义但是p没有
p2 = &i;//正确,int i 可以转换为常量
int &ri = ci;//错误,普通的int &不能绑定到int常量上
const int &r2 = i;//正确,const int& 可以绑定到一个普通的int上

补充:

vector<int>::iterator /*可以理解为*/ int* //代表非常量
vector<int>::const_iterator /*可以理解为*/ const int* //代表底层const
const vector<int>::iterator /*可以理解为*/ int* const //代表顶层const
const vector<int>::iterator /*可以理解为*/ const int* const //左侧的const为底层const,右侧的顶层const
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值