"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
这显然没问题。
最近在研究左值和右值的概念
当我做的时候
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
这显然没问题。