Mediumif constexpr
Что такое if constexpr?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
if constexpr (C++17) — условие вычисляется в compile-time, невыбранная ветка не компилируется (discarded). Позволяет писать generic-код для разных типов без SFINAE или tag dispatch.
template<class T>
void f(T x) {
if constexpr (std::is_integral_v<T>) {
x + 1; // для не-integral T даже не парсится
} else {
x.foo(); // для integral T не парсится
}
}- Заменяет много SFINAE и tag dispatch сценариев, делает код линейным;
- Condition должно быть константным выражением
bool; - Одна из самых удачных фич C++17 для template-кода.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.