【发布时间】:2023-03-11 02:15:02
【问题描述】:
如下:
int a, b, c;
a = b = c = 4;
r 值和 l 值是如何分类的?我的猜测是,从解析的角度来看,我们将从等于/赋值的 R-to-L 优先级开始,所以它会是:
c (lv) = 4 (rv)
现在c 的值为4,而b 成为左值:
b (lv) = c/4 (rv)
再说一遍:
a (lv) = b/4
所以,也许它看起来像:
a (lv) = (
b (lv) = (
c (lv) = 4 (rv) // start here
) (rv)
) (rv)
这或多或少是对赋值、左值和右值的正确理解吗?
【问题讨论】:
-
a、b和c都是左值。但是赋值c = 4的结果是一个右值。而赋值b = (c = 4)的结果是一个右值。 -
C 不使用术语右值。例如,您可以从左值转换中获得表达式的左值和值。但是,是的,您的解析树是正确的