2013-03-16 4 views
-4

Если int x=5; я полагаю, что выражение y=++x * ++x; оцениваются как:Унарного ++ порядок старшинства

Сначала выполните ++xx=6 вызывают, а затем снова ++x вызывая x=7 выражение затем оценивает y=x*x делает значение y=49 Используя тот же рассуждение о следующие строки кода

int z=5, x=5,y=0,p=0; 
y=++x * ++x + ++x; 
p= ++z + ++z * ++z; 

должны оцениваться одинаковые значения y и p, но компилятор производит разные ответы. Вероятно, я кое-что упустил в порядке очередности.

+0

Вы должны ** никогда не кодировать '++ x * ++ x' **, потому что это ** undefined bhavior **, и реализации разрешено что-либо делать (включая взлом компьютера или даже то, что вы наивно ожидая) –

ответ

3

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

+0

Почему компилятор должен производить одинаковый набор согласованных результатов на каждой компиляции? Не может быть ничего случайного, физика это предотвратит! –

+1

@PrakashGautam «Даже компилятор, производящий тот же набор согласованных результатов для неопределенного поведения», также является неопределенным поведением !! –

+1

@PrakashGautam Никто не сказал, что результат будет случайным, это может быть что угодно - вот что означает «неопределенное поведение» – qrdl

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