C++ 1z представит «constexpr if» - если это будет иметь один из удаленных ветвей, основанный на условии. Кажется разумным и полезным."constexpr if" vs "if" с оптимизацией - зачем нужен "constexpr"?
Однако невозможно ли исключить ключевое слово constexpr? Я думаю, что во время компиляции компилятор должен знать, что условие зависания известно во время компиляции или нет. Если это так, даже самый базовый уровень оптимизации должен удалить ненужную ветку.
Например (см в godbolt: https://godbolt.org/g/IpY5y5):
int test() {
const bool condition = true;
if (condition) {
return 0;
} else {
// optimized out even without "constexpr if"
return 1;
}
}
Godbolt EXPLORER показывает, что даже GCC-4.4.7 с -O0 не компилировать "возвращает 1", так что он достиг того, что было обещано, с constexpr if. Очевидно, такой старый компилятор не сможет это сделать, когда условие является результатом функции constexpr, но факт остается фактом: современный компилятор знает, является ли условие constexpr или нет, и мне не нужно явно указывать его.
Так что вопрос:
Почему "constexpr" необходим "constexpr если"?
Это не только вопрос оптимизации: мертвая ветвь 'constexpr if' допускается быть недействительной, то есть она не будет компилироваться сама по себе. Ваш вопрос стоит. – Quentin