В приведенном выше коде префикс ++
имеет приоритет над *=
и поэтому выполняется первым. В результате l
равно 4
.
ОБНОВЛЕНИЕ: Это действительно неопределенное поведение. Мое предположение о том, что правящий приоритет был ложным.
Причина в том, что l
является одновременно lvalue и rvalue в *=
, а также в ++
. Эти две операции не являются последовательными. Следовательно, l
пишется (и читается) дважды "без точки последовательности" (старая стандартная формулировка), и поведение не определено.
Как примечание, я предполагаю, что ваш вопрос связан с изменениями, касающимися точек последовательности в C ++ 0x. C ++ 0x изменил формулировку, касающуюся «точек последовательности», на «последовательность перед», чтобы сделать стандарт более понятным. Насколько мне известно, это не меняет поведение C ++.
ОБНОВЛЕНИЕ 2: Оказывается, на самом деле есть четко определенная последовательность в соответствии с разделами 5.17 (1), 5.17 (7) и 5.3.2 (1) проекта N3126 для C ++ 0x . @ Йоханнес Шауб ответ правильный и документирует последовательность заявления. Кредит должен, конечно, пойти на его ответ.