Ключевое слово constexpr
Ключевое слово constexpr сообщает компилятору,
что значение выражения или результат функции может
быть вычислен во время компиляции, а не во время
выполнения программы. Это позволяет ускорить работу
программы, так как вычисления выполняются один раз
при сборке. Ключевое слово constexpr можно
применять к переменным, функциям, конструкторам
и методам классов.
Если переменная объявлена как constexpr,
то её значение должно быть известно на этапе
компиляции, и оно не может быть изменено во время
выполнения программы. Если функция объявлена как
constexpr, то она может быть вызвана как
во время компиляции, так и во время выполнения,
в зависимости от контекста вызова.
Синтаксис
constexpr тип имя = значение;
constexpr тип имя_функции(параметры)
{
// тело функции
}
Пример
Давайте объявим constexpr переменную
с целочисленным значением и выведем её на экран:
#include <iostream>
using namespace std;
int main()
{
constexpr int num = 42;
cout << num << endl;
return 0;
}
Результат выполнения кода:
42
Пример
Давайте объявим constexpr функцию,
которая вычисляет квадрат числа, и вызовем её:
#include <iostream>
using namespace std;
constexpr int square(int x)
{
return x * x;
}
int main()
{
constexpr int res = square(5);
cout << res << endl;
return 0;
}
Результат выполнения кода:
25
Пример
Давайте используем constexpr переменную
для задания размера массива. Это возможно,
так как значение известно на этапе компиляции:
#include <iostream>
using namespace std;
int main()
{
constexpr int size = 5;
int arr[size] = {1, 2, 3, 4, 5};
for (int i = 0; i < size; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте создадим класс с constexpr
конструктором и constexpr методом:
#include <iostream>
using namespace std;
class Point
{
private:
int x;
int y;
public:
constexpr Point(int x, int y) : x(x), y(y)
{
}
constexpr int sum() const
{
return x + y;
}
};
int main()
{
constexpr Point p(3, 4);
constexpr int res = p.sum();
cout << res << endl;
return 0;
}
Результат выполнения кода:
7
Смотрите также
-
ключевое слово
const,
которое делает значение неизменяемым -
ключевое слово
consteval,
которое требует вычисления только во время компиляции -
ключевое слово
constinit,
которое гарантирует инициализацию во время компиляции -
конструкция
if constexpr,
которая выполняет ветвление на этапе компиляции