C++中的顶层const和底层const

在C++中,顶层const可以表示任意的对象是常量,而底层const则是与指针,引用这样的复合符合类型相联系。确切地说,在指针中,既有底层const之说,也有顶层const的说法。但在引用中就只有底层const,原因是顶层const表示任意的对象是常量,而引用不是对象。而在其他的类型中出现的const一般都是顶层const

int val = 3;
const int val1 = 5; //顶层const
const int *p1 = &val; //底层const;
int *const p2 = &val; //顶层const
const int *const p3 = &val; //左边的const是底层const,右边的const是顶层const
const int &ref = val;  //底层const

对象是底层const还是顶层const的区别就是在对象的拷贝上,对于一个顶层const对象的拷贝是没有印象的,其中的一个原因就是非常量可以转化为常量。

val = val1; //可以

而如果要拷贝的对象是底层const的话,那么就必须要满足一定的条件,如果是有关引用的赋值的话,我们就只需要看它是否满足引用的赋值规则,否则,拷入的对象和拷出的对象必须都要具有底层const。
有关引用的赋值规则,之前有写过。有关引用的赋值规则

bConp1 = p3; //可以,两者都具有底层const  

在指针中,我们可以这样去判断:如果允许我们修改指针的值,那么这个const是一个底层const,否则,是一个顶层const。换句话说,底层const修饰的指针是常(量)指针,而顶层const修饰的指针是指针常量。
常(量)指针:即虽然指针所指的对象本身可能不是常量,但我们不可以通过指针来修改这个对象,但我们可以用别的对象的地址再来初始化这个指针。
指针常量:只能被一个对象的地址初始化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值