C++左值引用

C++中引入左值引用是对C语言的一个超越,因此可以通过引用传递函数参数,而C语言只有按值传递函数参数。

1、C++在按照对引用传递函数参数值时对于参数类型匹配比较严格。在过去,如果函数按照引用传参,形参类型与实参不匹配的话,将会创建临时变量,而引用类型形参将会被绑定到该临时变量,因此,阻止了通过引用传参来实现被调函数更改调用函数变量的方式。现在,只有当形参为const引用时,C++才会允许创建临时变量,以前并不是这样;如果参数不匹配,则将会编译出错

如果形参时const类型,将在以下两种情况生成临时变量:

1)实参的类型正确,但不是左值;

2)实参的类型不正确,但可以转换为正确的类型。

实际上,对于形参为const类型的引用的C++函数,如果实参不匹配,则其行为类似于按值传递,为确保原始数据不被修改,将使用临时变量来存储值

这里,左值是可以被引用的数据对象(或者看其是否可被取地址):变量,数组元素,结构成员,引用,解引用的指针等都是左值。右值一般是字面常量,函数返回值,或者如x+y的表达式,但用引号括起的字符串除外。函数返回值为何为右值呢?因为返回值位于临时内存单元中,运行到下一条语句时,它们将不再存在,因此属于右值。

2、返回值类型为引用

函数返回值为非引用类型时,其返回值机制按照两步完成:1)return计算的表达式值将被复制到一个临时的位置2)然后再将该值复制给其它变量,实现函数值的返回

因此,在返回值为引用时,直接把要返回的变量复制给接收该返回值的变量,提高了效率。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值