左值引用与右值引用

左值、右值

在C++中,可以取地址、有名字的就是左值,不能取地址、没有名字的就是右值。
a = b + c&a是允许的操作,但&(b + c)则不会通过编译,因此a是一个左值,b + c是一个右值。

左值、将亡值、纯右值

在C++11中右值又分为将亡值、纯右值。
其中纯右值就是C++98中的右值概念,非引用返回的临时变量值、上例中a + b的临时变量值,字面值常量比如2、'a'、true,此外还有类型转换函数的返回值、lambda表达式等都是纯右值。
将亡值则是C++11新增的右值引用相关的表达式,比如返回右值引用T&&的函数返回值、std::move的返回值。
在C++11中所有程序中所有的值都属于左值、将亡值、纯右值中的一种。

右值引用

假设有函数T ReturnValue(),该函数的返回值就是一个纯右值,如果我们对该函数采用T t = ReturnValue()那么就会进行一次对象的析构、构造,但是如果我们采用C++11中的右值引用:

T && t = ReturnValue();

那么就可以减少这一次对象析构、构造的成本,ReturnValue()的返回值将直接变成右值引用。

注意

右值引用不能绑定到左值上,左值引用不可以绑定到右值上,常左值引用可以绑定到右值上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值