Можете ли вы написать что-то подобное в C с несколькими операциями присваивания?
int a = 0, b = 0, c = 0, d = 0; (((a = b) = c) = d);
Я где-то читал, что стандарт C утверждает, что результатом этого не будет lvalue?это не определено?
Вы можете сделать
a = b = c = d;
, что совпадает с
a = (b = (c = d));
Как вы говорите, (под-) выражение (a = b) не является lvalue и не может быть присвоено значение.
(a = b)
a=b=c=d;
совпадает с
(a = (b = (c = d)));
, потому что оператор '=' назначает справа налево ..
a=b возвращает значение b, которое не будет lvalue, и именно поэтому значение c не может быть присвоено этому выражению. С помощью скобок вы меняете обычный порядок назначений.
a=b
b
c
в этом случае значение d присваивается c, затем значение от c до b, затем значение от b до a.
d
a