【问题标题】:Rvalue and Lvalue References右值和左值引用
【发布时间】:2015-07-07 09:27: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&amp; 既是左值引用又是右值引用,而int&amp; 只是左值引用。据我所知int&amp;&amp; 是一个右值引用。那么单个 & 是如何引用右值引用的呢?

总结一下我的问题:

  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 正确性的机制。如果没有将您的引用声明为 const,您是在告诉编译器您可能正在对参数进行更改,但是修改临时右值对象的含义是什么?语言禁止它。

标签: c++ c++11


【解决方案1】:

const int&amp; 是一个左值引用。问题是语言指定它可以绑定到右值。 int&amp; 也是一个左值引用,但它不能这样做。这就是为什么第一个版本有效而​​第二个无效的原因。

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多