当左值的求值先于右值的求值并且赋值也返回一个值时,以下哪个是最先求值的?
int i = 2;
int x[] = {1, 2, 3};
int y[] = {4, 5, 6};
int z[] = {7, 8, 9};
x[--i] = y[++i] = z[i++]; // Out of bound exception or not?
注意:首先使用 l 值评估的通用类 C 语言。从我的教科书:
在某些语言中,例如 C,赋值被认为是一个运算符,其评估除了产生副作用外,还返回由此计算的 r 值。因此,如果我们用 C 编写:
x = 2;
对这样一个命令的求值,除了将值 2 赋给 x 外,还返回值 2。因此,在 C 中,我们也可以这样写:
y = x = 2;
这应该解释为:
(y = (x = 2));