Gui*_*e07 3 c++ rvalue-reference visual-c++ move-semantics c++11
#include <type_traits>
template<class T>
typename std::remove_reference<T>::type&& move(T&& v)
{
return v;
}
void main()
{
int a;
move(a);
}
Run Code Online (Sandbox Code Playgroud)
为什么这段代码不能编译?
错误C2440:'return':无法在'int &&'中转换'int'
v是return语句中的左值(出于安全原因,命名为rvalue引用是左值),但返回类型move是右值引用(T是int&,但是删除了引用,因此您int &&在返回类型中形成类型).
你需要static_cast的v,以remove_reference<T>::type &&第一次创建一个未命名的右值引用,当你想退货.
我不确定你的目标是什么.你想要使用std::move(就像你在标题中所说的那样),或者你想要了解它是如何实现的(就像你展示的代码所示).在std::move不了解基本C++规则的情况下尝试学习如何工作是没有意义的.我建议你看看我们的C++图书清单.掌握了C++之后,您可以了解它的std::move工作原理.
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |