В соответствии с ISO C11 - 6.5.16.3 говорится, что
- Оператор присваивания сохраняет значение в объекте, обозначенном левый операнд. Выражение присваивания имеет значение слева операнд после задания, но не является значением lvalue. Тип выражение присваивания - это тип, который будет иметь левый операнд после преобразование lvalue. Побочный эффект обновления сохраненного значения левый операнд секвенирован после вычисления значений слева и правые операнды. Оценки операндов не подвержены.
Итак, я думаю, это означает, что, например,
int x = 10;
x = 5 + 10;
- Левый операнд
x
оценивается до 10, а правый операнд оценивается равным 15. - Значение правого операнда сохраняется в объекте, обозначенном левым операндом
x
.
Но если целью назначения является сохранение значения evalauted правильного операнда (как и на этапе 2), почему нужна оценка левого операнда? Какой смысл оценивать левый операнд?