Mediumconstexpr

Что такое constexpr-функция и какие ограничения у неё?

1Постановка

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

2Решение

`constexpr`-функция может вычисляться во время компиляции, если все аргументы — константные выражения. С C++14/17/20 ограничения постепенно снимались.

// C++14: локальные переменные, if, циклы
constexpr int factorial(int n) {
    int result = 1;
    for (int i = 2; i <= n; ++i) result *= i;
    return result;
}

static_assert(factorial(5) == 120);   // compile-time
int x = factorial(readInput());       // runtime — тоже OK
  • В C++20: constexpr разрешил try/catch, dynamic_cast, std::vector/std::string;
  • consteval (C++20) — строго только compile-time;
  • constexpr даёт оптимизации без макросов и метапрограммирования.

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

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

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