"initial value of reference to non-const must be an lvalue" 从函数返回时可以有效吗?

"initial value of reference to non-const must be an lvalue" can be valid when returning from function?

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

当我做的时候

int&z  = 0 ;

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

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

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

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

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

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

错误消息非常清楚:

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

(强调我的)。只要引用最初绑定到左值,一切都很好(当然,只要您不使用对堆栈局部变量的引用)。从 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

这显然没问题。