右值和左值引用

Rvalue and Lvalue References

本文关键字:引用      更新时间:2023-10-16

我有一个函数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&&是一个右值引用。那么单个&可以引用右值引用吗?

总结我的问题:

  1. 左值参考参数

    void printInt(int& a)
    {
        cout<<a<<endl;
    }
    
  2. 右值引用参数

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

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

const int&是左值引用。问题是语言指定它可以绑定到右值。int&也是一个左值引用,但它不能这样做。