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