C++20 представил новое ключевое слово consteval, которое используется для объявления immediate функций.
Immediate функции - это функции, которые должны вычисляться исключительно во время компиляции. В отличие от constexpr функций, которые могут выполняться как во время компиляции, так и во время выполнения, consteval функции гарантированно вычисляются только на этапе компиляции.
Основные характеристики immediate функций
1. Гарантированное вычисление во время компиляции:
2. Могут использоваться там, где требуется константные выражения:
3. Поддерживают рекурсию:
Практический пример использования
Например нам надо посчитать хеш по заранее известным значениям и сделать ветвление по ним:
Заключение
В отличие от constexpr функций, которые предоставляют возможность выполнения как во время компиляции, так и во время выполнения, consteval функции делают намерения программиста более явными и гарантируют оптимизацию времени компиляции.
Immediate функции будут особенно полезны в следующих сценариях:
- Вычисление хешей строк
- Проверка корректности шаблонов
- Метапрограммирование