右值引用,移动语义,完美转发

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

文章预先发布于:pokpok.ink

名词解释

  • 移动语义:用不那么昂贵的操作代替昂贵的复制操作,也使得只支持移动变得可能,比如 unique_ptr,将数据的所有权移交给别人而不是多者同时引用。
  • 完美转发:目标函数会收到转发函数完全相同类似的实参。
  • 右值引用:是这两个机制的底层语言机制,形式是 Type&&,能够引用到“不再使用”的数据,直接用于对象的构造

要注意的是,形参一定是左值,即使类型是右值引用:

void f(Widget&& w) {
    /* w 在作用域内就是一个左值。 */
}

实现移动语意和完美转发的重要工具就是std::movestd::forwardstd::movestd::forward 其实都是强制类型转换函数,std::move 无条件将实参转换为右值,而 std::forward 根据实参的类型将参数类型转化为左值或者右值到目标函数。

移动语义

std::move(v) 相当于 static_cast(v),强制将类型转化为需要类型的右值,move 的具体实现为:

template
typename remove\_reference::type&&
move(T&& param) {
 using ReturnType = typename remove\_reference::type&&;
 return static\_cast(param);
}

  1. 其中 typename remove_reference::type&& 作用就是为了解决是当入参数是 reference to lvalue 的时候,返回类型ReturnType会因为引用折叠被推导为 T&remove_reference::type 就是为了去除推导出的模版参数 T 的引用,从到强制得到 T&am

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值