移动语义std :: move如何使用它 [英] move semantics std::move how use it
本文介绍了移动语义std :: move如何使用它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
#include <type_traits>
template<class T>
typename std::remove_reference<T>::type&& move(T&& v)
{
return v;
}
void main()
{
int a;
move(a);
}
为什么此代码无法编译?
Why doesn't this code compile?
错误C2440:'返回':无法在'int&&'中转换'int'
error C2440: 'return' : impossible to convert 'int' in 'int &&'
推荐答案
这完全符合C ++ 0x草案标准(§20.2.3/6):
This is straight out of the C++0x draft standard (§20.2.3/6):
template <class T> typename remove_reference<T>::type&& move(T&& t) noexcept;
返回:static_cast<typename remove_reference<T>::type&&>(t)
.
因此,如果将move
实现更改为以下内容,则可以正常工作:
Consequently, if you change your move
implementation to the following, it works just fine:
template<class T>
typename std::remove_reference<T>::type&& move(T&& v)
{
return static_cast<typename std::remove_reference<T>::type&&>(v);
}
这篇关于移动语义std :: move如何使用它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文