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