首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::move、std::forward、值类型、模板推导

std::move、std::forward、值类型、模板推导
EN

Stack Overflow用户
提问于 2016-07-15 00:18:18
回答 0查看 182关注 0票数 3

假设我有这样的代码

代码语言:javascript
复制
template <typename T> void Swap(T&& a, T&& b) {
    T tmp = std::move(a);
    a = std::move(b);
    b = std::move(tmp);
}

int main()
{
    int a = 2;
    int b = 3;
}

根据我对this talk的理解,在调用Swap(a, b)时,编译器应该推断出T&&应该为T&,并对其进行转换。但在这种情况下,GCC给了我以下错误:

代码语言:javascript
复制
error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'std::remove_reference<int&>::type {aka int}' 
T tmp = std::move(a);

我要么必须使用Swap(std::forward<int>(a), std::forward<int>(b))Swap(std::move(a), std::move(b))调用Swap,要么将Swap签名替换为Swap(T& a, T& b)

为什么会这样呢?这里的正确用法是什么?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38379307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档