Hardconstexpr
Чем consteval отличается от constexpr?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
`constexpr`-функция может вычисляться в compile-time или runtime — зависит от контекста. `consteval` (C++20, immediate function) — должна вычисляться только во время компиляции; вызов с runtime-аргументами — compile-ошибка.
constexpr int runtime_ok(int n) { return n * 2; } // и compile, и runtime
consteval int compile_only(int n) { return n * 2; } // только compile
int x = runtime_ok(42); // OK: runtime
// int y = compile_only(42); // ОШИБКА: аргумент не константа
constexpr int z = compile_only(42); // OK: константный аргументconstevalполезен для строгих компайл-тайм проверок (формат-строкиstd::format, asserts);constinit(C++20) — для static-переменных: требует константной инициализации, но не делает ихconst;- Три ключевых слова:
constexpr(и компайл, и рантайм),consteval(только компайл),constinit(компайл-инициализация переменной).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.