В C++ для вычисления значений на этапе компиляции используются спецификаторы consteval и constexpr, а также шаблоны метапрограммирования. В C11+ для ограниченного набора выражений — ключевое слово const.
constexpr: Указывает, что переменная или функция может быть вычислена на этапе компиляции. Если все аргументы известны на этапе компиляции, компилятор попытается выполнить вычисление. Если нет, вычисление произойдет в рантайме.
cpp
consteval: (C++20) Указывает, что функция должна быть вычислена на этапе компиляции. Вызов такой функции в контексте, где результат не может быть вычислен на этапе компиляции, приведет к ошибке компиляции.
cpp
Шаблоны метапрограммирования: Используют инстанцирование шаблонов для выполнения вычислений на этапе компиляции. Чаще всего используются для рекурсивных вычислений и генерации типов.
cpp
const: В C11 и более поздних версиях C, переменные, объявленные с const и инициализированные константным выражением, могут использоваться в контекстах, требующих констант времени компиляции (например, размер статического массива).
c
Вычисление на этапе компиляции (constexpr evaluation, compile-time evaluation) позволяет: