Rvalue和Lvalue参考

Avi*_*ick 4 c++ c++11

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

void printInt(const int& a)
{
    cout<<a<<endl;
}
Run Code Online (Sandbox Code Playgroud)

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

int a=5;
printInt(a);
printInt(5);
Run Code Online (Sandbox Code Playgroud)

它完美地运作.但是当我将函数定义更改为

void printInt(int& a)
{
    cout<<a<<endl;
}
Run Code Online (Sandbox Code Playgroud)

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

总结一下我的问题:

  1. 左值参考参数

    void printInt(int& a)
    {
        cout<<a<<endl;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. Rvalue参考参数

    void printInt(int&& a)
    {
        cout<<a<<endl;
    }    
    
    Run Code Online (Sandbox Code Playgroud)
  3. 左值和左值.但怎么样?

    void printInt(const int& a)
    {
        cout<<a<<endl;
    }
    
    Run Code Online (Sandbox Code Playgroud)

jua*_*nza 9

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