Как уже упоминалось в комментариях выше, вы не можете сделать безопасное предположение, что компилятор оптимизирует или не оптимизирует. Это их "свобода" делать это или нет.
Если вы хотите понять, что происходит, лучше всего посмотреть на сгенерированную сборку, которая даст вам объективный способ аргументировать, что, возможно, сделал компилятор. https://godbolt.org/z/W-5Hve показывает простой пример, который вы разместили выше.
Однако, пожалуйста, попробуйте сделать пример в Godbolt как можно более реалистичным, а затем проверьте сборку. Даже если два фрагмента дадут одну и ту же сборку в godbolt, чтобы убедиться, что это также произойдет в вашей кодовой базе, вам также необходимо проверить сборку вашей скомпилированной реализации в вашей кодовой базе.
Подводя итог, я обычно делаю следующее:
- попробуйте реалистичный пример в Godbolt, поиграйте с разными компиляторами / флагами и меняйте код, пока я не пойму, что происходит.
- скомпилируйте мой проект и посмотрите на сборку, чтобы попытаться снова найти конкретную функцию, чтобы убедиться, что результат в моей кодовой базе совпадает.
В качестве небольшого дополнения: objdump -M intel -dC executable
покажет вам сборку исполняемого файла.