【问题标题】:"initial value of reference to non-const must be an lvalue" can be valid when returning from function?“对非常量的引用的初始值必须是左值”从函数返回时是否有效?
【发布时间】:2021-06-15 22:08:23
【问题描述】:

最近在研究左值和右值的概念。

当我这样做时

int&z  = 0 ;

我收到一个预期的错误,例如:

initial value of reference to non-const must be an lvalue

但是,当我使用返回左值引用的函数执行此操作时:

int& get_value(){
    static int x = 10;
    return x;
}

//This line turns out to be valid...
get_value() = 20;

我想知道为什么get_value() = 20; 是有效的。

【问题讨论】:

  • 您没有在第二个代码中声明引用。相反,您将分配给来自get_value 的返回引用。您正在将苹果与橙子进行比较。
  • 在第二个 sn-p 中,返回的 int & 被初始化为 x(在 return x 行中),这是一个左值,所以没关系。赋值get_value() = 20 无关紧要,它不是初始化。

标签: c++ function lvalue


【解决方案1】:

错误信息很清楚:

初始非常量引用的值必须是左值

(强调我的)。只要引用最初绑定到左值,一切都很好(当然,只要您不使用对堆栈局部变量的引用)。从get_value 返回的引用绑定到x,这是一个左值,这是允许的。

没有这个函数,你实际上是在写:

int x = 10;      // x is an l-value
int &get_x = x;  // just a variable instead of a function
get_x = 20;      // assignment is ok

这显然没问题。

【讨论】:

    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2019-06-14
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多