移动语义std :: move如何使用它 [英] move semantics std::move how use it

查看:94
本文介绍了移动语义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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆