Самый простой ответ, который я могу придумать:
C ++ определяется в терминах абстрактной машины. Вывод программы, выполняемой на абстрактной машине, определяется ТОЛЬКО в порядке, в котором выполняются «побочные эффекты». А побочные эффекты определяются как вызовы функций библиотеки IO и изменения переменных, помеченных как volatile.
Компиляторам C ++ разрешено делать все, что им нужно, для внутренней оптимизации кода, но они не могут изменить порядок записи в переменные и вызовы io.
Точки последовательности определяют сердцебиение программы c / c ++ - побочные эффекты до того, как точка последовательности будет «завершена», а побочные эффекты после точки последовательности еще не произошли. Но побочные эффекты (или код, который может косвенно влиять на побочный эффект ( в пределах точки последовательности) можно переупорядочить.
Именно поэтому понимание их важно. Без этого понимания ваше фундаментальное понимание того, что такое программа на С ++ (и как она может быть оптимизирована агрессивным компилятором), неверно.