Rvalue和Lvalue参考

时间:2015-07-07 09:27:17

标签: c++ c++11

我有一个函数printInt,如下所示。

void printInt(const int& a)
{
    cout<<a<<endl;
}

当我使用以下参数调用函数时,如

int a=5;
printInt(a);
printInt(5);

完美无缺。 但是当我将函数定义更改为

void printInt(int& a)
{
    cout<<a<<endl;
}

这会给通话printInt(5)带来错误。现在我的问题是为什么const int&既是左值和右值引用,而int&也只是左值引用。据我所知int&&是左值参考。那么如何单一&amp;可以参考右值参考?

总结我的问题:

  1. 左值参考参数

    void printInt(int& a)
    {
        cout<<a<<endl;
    }
    
  2. Rvalue参考参数

    void printInt(int&& a)
    {
        cout<<a<<endl;
    }    
    
  3. 左值和左值。但是如何?

    void printInt(const int& a)
    {
        cout<<a<<endl;
    }
    

1 个答案:

答案 0 :(得分:9)

const int&是左值参考。问题在于语言指定它可以绑定到rvalues。 int&也是左值引用,但它不能这样做。这就是为什么第一个版本有效,第二个版本没有。