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