Mediumconstevalc++20

Что такое consteval и когда использовать?

1Постановка

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

2Решение

`consteval` (C++20) — immediate function, обязана выполняться во время компиляции. В отличие от constexpr, вызов с runtime-аргументами — ошибка компиляции.

consteval uint32_t fnv1a(const char* s) {
    uint32_t h = 2166136261u;
    while (*s) { h ^= static_cast<unsigned char>(*s++); h *= 16777619u; }
    return h;
}

constexpr uint32_t h = fnv1a("hello");  // OK, compile-time
int n = fnv1a(argv[1]);                  // ОШИБКА: runtime аргумент

Применения: генерация lookup-таблиц, compile-time парсинг форматных строк, вычисление хешей для switch по строкам, гарантированные assertions. `constinit` (C++20) — для static-переменных: гарантия constant initialization (без runtime-инициализации).

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

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

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