РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
19 of 815 menu

Ключевое слово consteval

Ключевое слово consteval указывает компилятору, что функция должна вычисляться во время компиляции. Такие функции называются немедленными (immediate functions). Если вызов consteval-функции не может быть вычислен на этапе компиляции, программа считается некорректной и компилятор выдаст ошибку. Параметры функции при этом должны быть константными выражениями, известными на момент компиляции.

Ключевое слово consteval появилось в стандарте C++20. В отличие от constexpr, которое лишь разрешает вычисление на этапе компиляции, consteval требует его.

Синтаксис

consteval return_type function_name(parameters) { // тело функции }

Пример

Давайте объявим consteval-функцию, которая возводит число в квадрат, и вызовем её с константным аргументом:

#include <iostream> using namespace std; consteval int square(int n) { return n * n; } int main() { int res = square(5); cout << res << endl; return 0; }

Результат выполнения кода:

25

Пример

Давайте попробуем вызвать consteval-функцию с переменной, значение которой известно только во время выполнения. Такой код не скомпилируется:

#include <iostream> using namespace std; consteval int square(int n) { return n * n; } int main() { int x = 5; // ошибка компиляции: x не является // константным выражением int res = square(x); cout << res << endl; return 0; }

Результат выполнения кода:

error: call to consteval function 'square' is not a constant expression

Пример

Давайте используем consteval-функцию для вычисления размера массива на этапе компиляции:

#include <iostream> using namespace std; consteval int get_size() { return 5; } int main() { int arr[get_size()] = {1, 2, 3, 4, 5}; for (int i = 0; i < get_size(); i++) { cout << arr[i] << " "; } cout << endl; return 0; }

Результат выполнения кода:

1 2 3 4 5

Смотрите также

  • ключевое слово constexpr,
    которое разрешает вычисление на этапе компиляции
  • ключевое слово constinit,
    которое гарантирует статическую инициализацию
  • ключевое слово const,
    которое делает переменную неизменяемой
  • оператор sizeof,
    который возвращает размер типа или объекта
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить