Описание тега as-if
Правило "как если бы" допускает произвольную оптимизацию компилятора при условии, что наблюдаемое поведение не меняется.
Пока компилятор гарантирует, что
- все летучие вещества стабильны в точках последовательности (то есть все прошлые и будущие эффекты либо не начались, либо видны глобально), и доступ к летучим веществам не переупорядочивается
- внешне наблюдаемое поведение является идентичным (то есть выход в правильном порядке в отношении других входных и выходных подсказок, выход идентично, файлы записываются содержат правильные данные в конце программы или после закрытия ручки и т.д.)
- изменения в среде с плавающей запятой реализованы должным образом и не переупорядочиваются
любой двоичный код, который мог создать компилятор, ведет себя так, как если бы это был тот же самый код, который написал программист. Поскольку наблюдатель не может заметить разницу, вполне законно выполнять любую оптимизацию, которая не нарушает гарантии правила "как если бы".