注册 登录
编程论坛 C++教室

这个引用怎么理解?

sharplong 发布于 2017-05-27 12:53, 2487 次点击
只有本站会员才能查看附件,请 登录

int &r4 = r1 * 2;为什么不正确呢?
9 回复
#2
sharplong2017-05-27 13:16
编辑器提示,非常量引用初始化值必须是左值,r1不是左值吗?
#include "stdio.h"
void main()
{
    int i =42;
    int &r1 = i;
    int &r4 = r1*2;
}
#3
九转星河2017-05-27 13:35
似乎引用是C++的概念~这个我也说不上什么~~
#4
rjsp2017-05-27 13:49
编辑器提示,非常量引用初始化值必须是左值,r1不是左值吗?
    int &r4 = r1*2;
r4 引用的是 r1*2,与r1是不是左值有个屁关系呀,只与r1*2是不是左值有关

如果 int& r4 = r1*2; 是合法的。
那么 r4 = 0 也就是合法的,即 r1*2 = 0 是合法的。
#5
sharplong2017-05-27 14:25
回复 4楼 rjsp
r1*2不是左值
const int &4 = r1*2;就没问题。
#6
rjsp2017-05-27 14:42
以下是引用sharplong在2017-5-27 14:25:00的发言:

r1*2不是左值
const int &4 = r1*2;就没问题。

你这是 陈述语句,还是 疑问语句?
如果是 陈述语句,那我回答:是的,正如你所言,const int & 可以引用一个 右值。
如果是 疑问语句,那我回答:当然没问题呀,因为是const,所以不可写出 r4 = 0 这种语句,也就是不可能有 r1*2 = 0 这种非法情况出现。
#7
sharplong2017-05-27 15:12
回复 6楼 rjsp
所以不可写出 r4 = 0 这种语句,也就是不可能有 r1*2 = 0 这种非法情况出现。
-----------------------------------------------------
感谢版主的耐心解答,您的答案又更一步启发了我。
您的意思是:
如果 int &r4 = r1*2; 成立 那么
        r4 = 0;
        r1 *2 = 0;成立,
但是很显然以上两条语句为非法,所以 int &r4 = r1*2非法
然而 加上const 就不会出现上面两条语句的可能性。所以const int &r4 = r1*2 是正确的。

[此贴子已经被作者于2017-5-27 15:19编辑过]

#8
sharplong2017-05-27 15:20
回复 3楼 九转星河
感谢大佬关注
#9
yangfrancis2017-05-27 15:43
回复 8楼 sharplong
引用就是建立另一个变量的别名。右值当然只能指向一个变量。指向常量或表达式都会被认为非法
#10
sharplong2017-05-27 15:55
回复 9楼 yangfrancis
多谢指导。
1