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