Что будет выход кодаЧто такое вывод следующего кода?
int a=3,b=4;
++a*=++b;
cout<<a<<endl;
компилятор показывает a=20
output.How precedence
и operator associativity
используется здесь?
Что я понимаю:
первый b
слева от ++a*=++b;
увеличивается нам его оператор unary
затем приходит поворот *=
так выражение становится ++a = a * ++b;
как a=3
и b=5
теперь так становится 15
тогда 15
является присваивается a
и увеличивается. Окончательно получив 16
, но компилятор дает 20
Ваше понимание неверно. Ваш код изменяет 'a' * дважды * без промежуточной * точки последовательности *. Поэтому ваш код имеет * неопределенное поведение *. См. Ссылку cHao для подробного объяснения. – john
@john - это формальный способ сказать, что компилятор не должен иметь дело с этим типом ****. –
Это неопределенное поведение из-за отсутствия точек последовательности. Правдоподобно, что 4 * 5 = 20; однако вы не знаете, каким будет результат ++ a, поэтому он не определен. – 2013-04-22 21:18:36