c++中常出现error为:非常量引用的初始值必须为左值。即说明你引用不是左值,可能为右值。那么左值与右值的区别是什么呢?
看能否对表达式取地址,如果能,则为左值;否则为右值。
例如:
int i = 5; int &a = i; 这时编译通过,但是如果 int &a = 5;这样就出错了 这个5和i有什么区别,答案就是5是右值,i是左值,为什么,参考上面的话。 回到你的代码 你用一个函数的返回值给非常量引用初始化 那么函数的返回值是啥呢 在函数返回的时候,系统将返回值存放至eax寄存器,然后回到主函数中,eax寄存器存放的就是返回值,而这里这个返回值就是一个数值,不能对其取地址,所以这是一个右值