Двойное присвоение одной и той же переменной в одном выражении в C ++ 11
Стандарт C ++ 11 (5.17, expr.ass) утверждает, что
Во всех случаях присваивание выполняется после вычисления значения правого и левого операндов и до вычисления значения выражения присваивания. Что касается вызова функции с неопределенной последовательностью, операция составного присваивания является единственной оценкой
Насколько я понимаю, все выражения, являющиеся частью данного присваивания, будут оцениваться до самого присваивания. Это правило должно работать, даже если я изменяю одну и ту же переменную дважды в одном и том же присваивании, что, я уверен, ранее было неопределенным поведением.
Будет ли данный код:
int a = 0;
a = (a+=1) = 10;
if ( a == 10 ) {
printf("this is defined");
} else {
printf("undefined");
}
всегда оценивать?a==10