C++学习笔记1-const引用

    const引用可以用不同类型的对象初始化(只要能从一种类型转换到另一种类型即可),也可以是不可寻址的值,如文字常量,例如:

    同样的初始化对于非const引用是不合法的,将导致编译错误。原因如下。

    引用在内部存放的是一个对象的地址,它是该对象的别名。对于不可寻址的值,如文字常量,以及不同类型的对象,编译器为了实现引用,必须生成一个临时对象,引用实际上指向该对象,但用户不能访问它。例如,当我们写:

    编译器将其转换成:

    如果我们给ri赋一个新值,则这样做不会改变dval,而是改变temp。对用户来说,就好像修改动作没有生效。

    const引用不会暴露这个问题,因为它们是只读的。不允许非const引用指向需要临时对象的对象或值,一般来说,这比“允许定义这样的引用,但实际上不会生效”的方案要好。

 

    下面给出的例子很难在第一次就能正确声明。我们希望用一个const对象的地址来初始化一个引用。非const引用定义是非法的,将导致编译时刻错误:

    下面是在打算修正pi_ref定义时首先想到的做法,但是该定义不能生效。

    如果从右向左读这个定义,会发现pi_ref是指向一个定义为const的int型对象的指针,我们的引用不是指向一个常量,而是指向一个非常量指针,指针指向一个const对象。

    正确的定义如下:

    指针和引用有两个主要区别:引用必须总是指向一个对象。如果用一个引用给另一个引用赋值,那么改变的是被引用的对象而不是引用本身。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值