std::move详解
std::move详解
Owner: 二木
在我们使用移动构造函数的时候,我们会用到move
例如:
1 |
|
将我们的vec1从左值强制转换为右值
std::move源码
这里运用到了模板的知识
1 | template <typename T> |
这里将remove_reference
这里使用的是元编程中的类型萃取表达式,remove_reference萃取模板的源码
1 | template <typename T> |
remove_reference这里使用了模板的特化与偏特化,通过传入的类型来命中对应的特化模板,两个特化模板实现的操作都是将传入的引用去除。使得其能够返回我们原来传入的非引用类型。
我们继续看到这个代码
1 | template <typename T> |
typename remove_reference<T>::type&&
就是我们的返回值类型,typename的作用是告诉编译器我们这里的remove_reference<T>::type&&
是表示的是一个数据类型
对于static_case
的常用的用法
1 | static_case<int>(a) |
这里表示的是将我们的a强制转换为int类型
对于强制转换c++有四种使用发生,下面有个大佬写的总结非常不错。
C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast) (biancheng.net)
static_case<typename remove_reference<T>::type&&>(t)
对于这一句,就是调用我们的一个强制类型准换符static_case
将我们传入的T 强制转换为typename remove_reference<T>::type&&
类型,而我们的typename remove_reference<T>::type
的返回值为就是传入数据的非引用类型,然后加上外面的&&
就变成了 T &&,从而完成了左值对于右值的转换。
评论