Детский вопрос про оптимизацию

Если у меня есть код, зависимый от константы:

constexpr uint8_t x = 6;

if (x >2) {
.... большой код
}
else {
... еще больший код
}

Если оптимизатор уже в момент компиляции видит, что x точно больше 2 - означает ли это, что он и проверку в строке 3, и ветку else - он вовсе выкинет из кода?

Без гарантий, но можно полагаться, в целом.

почитал сам, вот так вот точно выкинет

constexpr uint8_t x = 6;

if constexpr (x >2) {
.... большой код
}
else {
... еще больший код
}

но это работает только с С++17

А если так?

#if x >2
.... большой код
#else 
... еще больший код
#endif

для гарантии ))

1 лайк

ну да, но тогда и constexpr не нужен

Это как повезёт. Если хотите гарантий, используйте if constexpr

Насколько я знаю, конструкцию из первого сообщения компилятор урежет и без constexpr. Выкинет все условия точно. Это если мы о avr-gcc.