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 подскажет развёрнутый ответ в реальном времени.