C++Primer 设置一个类型为auto的引用时,初始值中的顶层常量属性仍然保留。和往常一样,如果我们给初始值绑定一个引用,则此时的常量就不是顶层常量了。

首先是第一句话“设置一个类型为auto的引用时,初始值中的顶层常量属性仍然保留。
解释:首先用一段程序来表示
const int x=100;
auto &y=x; //此时x是初始值,y的类型是const int&,也就是一个常量引用。

从上面来理解“初始值的顶层常量属性仍然保留”,可以很容易理解到,当定义了类型为auto的引用后,即auto &y=x; 它的初始值x还是一个const int 型的对象,也就是一个顶层的const对象。

程序实际运行如下:
在这里插入图片描述
在这里插入图片描述
从上两图可以看出,当我定义auto引用后,我想给x和y另外赋值时,程序运行时是显示错误的。
错误原因就是表达式左侧必须是可修改的,那么就说明x和y是个常量。那么就可以证明我所说的是正确的。

然后是第二句“和往常一样,如果我们给初始值绑定一个引用,则此时的常量就不是顶层常量了
注意这句话“和往常一样”,那么就不是上面这种情况——定义auto类型的引用,而是一般下定义引用的情况。
这里初始值的跟上面的初始值的意思是一样的,即我假定的const int x=100;这里的x就是初始值,类型就是const int——整型常量。
接下来是这句话“如果我们给初始值绑定一个引用”,这句话意思就是我们定义一个引用去绑定整型常量x;那么我们想到绑定整型常量的引用一定是一个常量引用对吧,那么就要回到2.4.1节 const的引用这一节(P54)。即编写程序:const int &z=x;
执行完上面的操作后,你会发现这里z是一个const int&是一个常量引用,在2.4.3 顶层const(P57-58)这一节中说过,用于声明引用的const都是底层const。

那么就可以证明最后一句话“则此时的常量就不是顶层常量了”。

**注意:**第一句话的常量和第二句话的常量的意思是不一样的。因为第一句表明了它是初始值的常量;而第二句只是说了此时的常量,并没有表明它是初始值得常量,那么它是常量引用中的常量。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值