Назначения в C - PullRequest
       5

Назначения в C

0 голосов
/ 22 сентября 2011

Можете ли вы написать что-то подобное в C с несколькими операциями присваивания?

int a = 0, b = 0, c = 0, d = 0;
(((a = b) = c) = d);

Я где-то читал, что стандарт C утверждает, что результатом этого не будет lvalue?это не определено?

Ответы [ 3 ]

11 голосов
/ 22 сентября 2011

Вы можете сделать

a = b = c = d;

, что совпадает с

a = (b = (c = d));

Как вы говорите, (под-) выражение (a = b) не является lvalue и не может быть присвоено значение.

0 голосов
/ 22 сентября 2011
     a=b=c=d;

совпадает с

    (a = (b = (c = d))); 

, потому что оператор '=' назначает справа налево ..

0 голосов
/ 22 сентября 2011

a=b возвращает значение b, которое не будет lvalue, и именно поэтому значение c не может быть присвоено этому выражению. С помощью скобок вы меняете обычный порядок назначений.

a = b = c = d;

в этом случае значение d присваивается c, затем значение от c до b, затем значение от b до a.

...