右值引用的作用

右值引用的作用:实现移动语义和完美转发
下面解释这两个含义。

1.先从右值定义的角度来看

什么是左值?就是一个指向某一块内存空间的表达式或者变量,可以取地址。
什么是右值?右值就是非左值的表达式

2.什么是移动语义?

一般来说,我们给一个对象赋值的时候,会把源对象进行一个复制,然后把源对象的副本赋值给目的对象,之后销毁源对象。有了移动语义之后,就可以避免没有必要的复制和销毁操作,直接把源对象移动给目的对象,这就是移动语义。

3.什么是完美转发?

3.1对于一些函数形参,直接引用右值的话会行不通,需要加上const关键字,但这种转发就把参数固定死了,没办法修改,这就是不完美转发,如图1和图2所示为不完美的转发:
图1



图2
3.2用右值引用可以解决这个问题,实现完美转发,也就是说完美转发后可以对参数的值进行修改了,如图3所示:
图3
以上如何验证?

4.用下面的实验验证:

4.1下面这幅图说明test()和test01()里面的a是占用同一块内存的变量,说明是右值引用。
在这里插入图片描述
4.2下面这幅图说明test()和test01()里面的a是占用不同的内存,说明是普通传值,不是转发。

在这里插入图片描述
4.3下面的图说明右值不能直接当成左值引用。
在这里插入图片描述

4.4下面的三幅图说明了b=test01(10)里面的10在test01()的作用下变成了左值。
在这里插入图片描述



在这里插入图片描述



在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++11中,右值引用作用之一是实现移动语义,即对象的资源所有权的转移。在C++11之前,移动语义的缺失是C++所面临的一个问题。右值引用也可以看作是一块空间的别名,只能引用右值。通过使用右值引用,我们可以对右值进行引用,并且可以实现对移动语义的支持。右值引用的语法是在类型后面加上两个&&。在函数返回值为临时变量的情况下,可以使用右值引用来接收该临时变量。另外,右值引用还可以引用经过move操作后的左值,通过使用move函数,可以改变左值的属性,使其变成右值。总之,右值引用C++中的作用主要是支持移动语义,提高程序的性能和效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [c++右值引用具体用法](https://download.csdn.net/download/weixin_38734492/14887141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C++11——右值引用](https://blog.csdn.net/weixin_57023347/article/details/120957689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值