b707
08.Апрель.2024 15:00:42
1
Если у меня есть код, зависимый от константы:
constexpr uint8_t x = 6;
if (x >2) {
.... большой код
}
else {
... еще больший код
}
Если оптимизатор уже в момент компиляции видит, что x точно больше 2 - означает ли это, что он и проверку в строке 3, и ветку else - он вовсе выкинет из кода?
rkit
08.Апрель.2024 15:06:37
2
Без гарантий, но можно полагаться, в целом.
b707
08.Апрель.2024 15:12:40
3
почитал сам, вот так вот точно выкинет
constexpr uint8_t x = 6;
if constexpr (x >2) {
.... большой код
}
else {
... еще больший код
}
но это работает только с С++17
v258
08.Апрель.2024 15:13:15
4
А если так?
#if x >2
.... большой код
#else
... еще больший код
#endif
для гарантии ))
1 лайк
b707
08.Апрель.2024 15:14:29
5
ну да, но тогда и constexpr не нужен
Это как повезёт. Если хотите гарантий, используйте if constexpr
te238s
09.Апрель.2024 05:49:00
7
Насколько я знаю, конструкцию из первого сообщения компилятор урежет и без constexpr. Выкинет все условия точно. Это если мы о avr-gcc.