Mediumconstexpr

Что такое constexpr-функция?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

constexpr-функция может вычисляться во время компиляции, если все её аргументы — константные выражения. Но может вызываться и в runtime — в зависимости от контекста.

constexpr int factorial(int n) {
    int result = 1;
    for (int i = 2; i <= n; ++i) result *= i;  // C++14+: циклы OK
    return result;
}
static_assert(factorial(5) == 120);   // compile-time
int n = std::atoi("5");
int r = factorial(n);                 // runtime — тоже OK
  • С C++14: локальные переменные, if, циклы, несколько return;
  • С C++20: constexpr-строки/векторы (с условностями);
  • Применяется для static_assert, шаблонных параметров, размера массивов.

consteval (C++20) — строго только compile-time.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.