双安培和返回类型是什么意思?

时间:2014-08-10 15:27:07

标签: c++ c++11 move ampersand

我偶然发现了这样的语法:

int&& move(int&& x)
{
    return x;
}

这应该是std::move函数的实现方式,但我不太明白返回类型(&&)实际意味着什么。

我用google搜索过,未能回答错误,有人可以向我解释一下吗?

编辑:

我的大部分困惑都来自于一个函数的返回已经是一个右值,所以我不明白什么&&可以改变那里..不确定我是否有意义。

2 个答案:

答案 0 :(得分:4)

在这种情况下,move函数使用所谓的rvalue references - 相对较新的C ++特性。在this article中很好地解释了它。

答案 1 :(得分:3)

来自:http://www.stroustrup.com/C++11FAQ.html#rval

&&表示"右值参考"。右值引用可以绑定到右值(但不能绑定到左值):

X a;
X f();
X& r1 = a;      // bind r1 to a (an lvalue)
X& r2 = f();    // error: f() is an rvalue; can't bind

X&& rr1 = f();  // fine: bind rr1 to temporary
X&& rr2 = a;    // error: bind a is an lvalue