【发布时间】: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无关紧要,它不是初始化。