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::move
和 std::forward
,std::move
和 std::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);
}
-
其中
typename remove_reference::type&&
作用就是为了解决是当入参数是reference to lvalue
的时候,返回类型ReturnType
会因为引用折叠
被推导为T&
,remove_reference::type
就是为了去除推导出的模版参数 T 的引用,从到强制得到T&am