2013-11-19 2 views

ответ

2

Только x модифицируются и это значение становится 2. Причиной этого является короткое раскручивание поведения логического оператора ||.
Компилятор интерпретирует z=++x||++y&&++z;, как

z = ++x || (++y&&++z); 

из-за более высокого приоритета над &&||. С x является 1, то есть первое подвыражение || истинно, другие не будут проверены (и оценены).
Примечание: Вы можете получить предупреждение от некоторого компилятора

[Warning] operation on 'z' may be undefined [-Wsequence-point] 

это из-за той причине, что вы не можете изменить переменную дважды между двумя точками последовательности. Но в приведенном выше коде z++ никогда не оцениваются, поэтому его поведение не определено.

+1

Ну, 'z' будет присвоен результат' ++ x', поэтому значения будут 'x' == 2,' y' == 1 и 'z' == 2. –

+1

@JohnBode ; Нет. Все выражение возвращает логическое значение '1' в' z'. – haccks

+1

Duh. Я знал это. Служит мне для комментариев, прежде чем я полностью проснусь. –

Смежные вопросы