Аналогичные коды, например (a+=1)%=7;
, где a — переменная int
.
Мы знаем, что оператор +=
или =
не является точкой последовательности, поэтому у нас есть два побочных эффекта между двумя соседними точками последовательности. (здесь мы используем правила точки следования cpp98)
Однако операторы присваивания, такие как +=
или =
, гарантируют возврат lvalue после присваивания, что означает, что порядок выполнения в некоторой степени "определен".
Так это неопределенное поведение?
int a = 2; (a = 1) = a;
, то это является неопределенным (как это имеетclang-cl
: модификация без последовательности и доступ к 'a'). - person Adrian Mole   schedule 01.04.2020+=
и%=
изменяютa
, приводит к неопределенному поведению. - person Peter   schedule 01.04.2020