你能用C进行多次赋值操作吗?
int a = 0, b = 0, c = 0, d = 0;
(((a = b) = c) = d);
我读过某个地方C标准声明这个结果不是左值?这是未定义的吗?
答案 0 :(得分:11)
你可以做到
a = b = c = d;
与
相同a = (b = (c = d));
如你所说,(子)表达式(a = b)
不是左值,不能赋值。
答案 1 :(得分:0)
a=b
返回b
的值,该值不是左值,这就是为什么c
的值无法分配给该表达式的原因。
使用括号,您将改变通常的作业顺序。
a = b = c = d;
在这种情况下,d
的值已分配给c
,然后将值c
分配给b
,然后将值b
分配给a
}。
答案 2 :(得分:0)
a=b=c=d;
与
相同 (a = (b = (c = d)));
因为'='运算符从右向左分配..