#include <type_traits>
template<class T>
typename std::remove_reference<T>::type&& move(T&& v)
{
return v;
}
void main()
{
int a;
move(a);
}
为什么这段代码不能编译?
error C2440: 'return' : impossible to convert 'int' in 'int &&'
最佳答案
v
是返回语句中的左值(出于安全原因,命名右值引用是左值),但是 move
的返回类型是一个右值引用( T
是 int&
,但是你删除了引用,所以你在返回类型中形成了类型 int &&
)。
您需要 static_cast
v
至 remove_reference<T>::type &&
首先创建一个未命名 右值引用,当你想返回它时。
我不确定你的目标是什么。你要么使用 std::move
(就像你在标题中说的那样),或者你想了解它是如何实现的(就像你显示的代码所示)。尝试学习如何做是没有意义的 std::move
在不知道基本 C++ 规则的情况下工作。我建议你看看我们的C++ Books List .掌握 C++ 后,您可以学习如何使用 std::move
作品。
关于c++ - move 语义 std::move 如何使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5529881/