左值、右值、左值引用、右值引用...

左值

有名字、可取地址的变量。

右值

没名字、不能取地址的常量。

左值引用

绑定左值后,为该左值的别名。

右值引用

绑定右值后,为该右值的别名,此时该右值为左值属性。

右值引用的用途

移动语义

在C++中默认赋值操作为拷贝赋值,往往会利用左值引用来实现,那么如果不拷贝而采用移动来实现赋值操作呢?这时候右值引用应运而生,通常情况,采用右值引用的赋值操作为移动赋值。

万能引用

在模版函数下,T &&为万能引用,既可以接收左值也可以接收右值。原理:类型推导和引用折叠。

配合完美转发

万能引用往往会配合完美转发,forward<T>()。原因:右值引用的特性导致右值拥有了左值属性,再次传递该参数即会被识别为左值,需要完美转发来保留右值属性。

move()

将左值强转为右值,注意返回类型为remove_reference<T> &&,为右值引用,不过匿名右值引用即右值;注意move之后的对象不能被使用,此时它属于没有被定义;注意move不是直接移动内存的数据,它只是将左值转为右值,然后右值作为参数传递进赋值操作,再进行数据的移动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

❀云坠入雾里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值