У меня сегодня был спор с одним из моих коллег относительно того факта, что компилятор может изменить семантику программы, когда включена агрессивная оптимизация.
Моя коллега заявляет, что когда оптимизация включена, компилятор может изменить порядок некоторых инструкций. Так что:
function foo(int a, int b)
{
if (a > 5)
{
if (b < 6)
{
// Do something
}
}
}
Может быть изменено на:
function foo(int a, int b)
{
if (b < 6)
{
if (a > 5)
{
// Do something
}
}
}
Конечно, в этом случае не меняет общее поведение программы и не действительно важно.
Насколько я понимаю, я считаю, что две if (condition)
принадлежат двум разным точкам последовательности и что компилятор не может изменить их порядок, даже если его изменение сохранит общее поведение.
Итак, дорогие пользователи SO, что это за истина?