【发布时间】:2017-07-04 09:02:08
【问题描述】:
只是为了确认我对std::move的理解
std::move - 将 T& 转换为 T&& 以便 T's 移动构造函数将启动(如果存在,否则复制 ctor 将发挥其作用,除非我们没有从外部删除移动 ctor/赋值) .
当我查看std::move 的可能实现时,就像
template<typename T>
typename remove_reference<T>::type&& move(T&& param)
{
using ReturnType =typename remove_reference<T>::type&&;
return static_cast<ReturnType>(param);
}
它使用 remove_reference<T> 的原因是因为引用折叠应用于 forward_reference T&&
我只是想知道为什么我们需要前向引用,我们不能这样做吗
template<typename T>
T&& moveInQuestion(T& p){
return static_cast<T&&>(p);
}
struct someType{};
someType lvalref;
static_assert(is_same<decltype(moveInQuestion(lvalref)),decltype(std::move(lvalref))>::value,"");
static_assert 没有失败。
而且我还认为std::move 的价值类别是lvalue,在这种情况下moveInQuestion 可能比std::move 更好吗?
【问题讨论】:
标签: c++ c++11 move-semantics