c++ 右值引用

什么是右值

Generally, rvalues are values whose address cannot be obtained by dereferencing them, either because they are literals or because they are temporary in nature (such as values returned by functions or explicit constructor calls).

以上是cplusplus.com给出的解释
简单地说,就是立即数,如0,1,100,1.0f,或者临时对象,如”hello”,Class1(), Class2(“a”)

什么是右值引用

在函数间参数传递时,为区分左值引用,使用&&表示右值引用,如以下foo2函数就是使用了右值引用传递参数

`
void foo1(T& t) {

}
void foo2(T&& t) {

}
`

为什么要引入右值引用

有两个目的:
1. 减少不必要的拷贝(如以前发生在拷贝构造函数时的拷贝操作),提升程序运行性能
2. 简化泛型编程,提高编程效率,这一点依赖于采用右值引用实现的完美转发,保证参数在传递的过程中类型不变,如& -> &, const & -> const &, && -> &&

右值引用带来的影响

被右值引用过的变量(使用std::move)不能再使用,因为此时变量的状态不可知,除非重新赋值。

我们需要做什么

  • 定义自己的转移构造函数(即以&&为参数的构造函数)
  • 使用std::move获取右值引用,更好地利用标准库已经实现的转移构造函数
  • 在泛型编程时,使用&&代替各种类型的函数重载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值