Hardconstexpr
Чем constexpr-функция лучше TMP?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
constexpr-функция (C++14+) вычисляется во время компиляции обычным синтаксисом C++, заменяя многие TMP-сценарии.
// TMP — десятки строк шаблонной магии; constexpr — одна читаемая функция
constexpr int fact(int n) {
return n <= 1 ? 1 : n * fact(n - 1);
}
static_assert(fact(5) == 120); // compile-time
int x = fact(runtime_n); // runtime — та же функция- Обычный синтаксис C++, можно отлаживать, ошибки понятные;
- Может выполняться и в compile-time, и в runtime;
- C++20 разрешил
std::vector/std::string,dynamic_cast,try/catchв constexpr; consteval— строго compile-time. TMP остаётся для type-level метапрограммирования.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.