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

Предположим, что мы хотим указать размер массива в глобальной области видимости с помощью значения, возвращаемого функцией:

int func() {
   return 5 + 3;
}
int arr[func()] = {0};

В результате получим ошибку при компиляции:

error: array bound is not an integer constant before ']' token

Чтобы возвращаемое функцией значение было константным и вычислялось на этапе компиляции, следует перед типом возвращаемого значения указать ключевое слово constexpr:

constexpr int func() {
   return 5 + 3;
}
int arr[func()] = {0}; // OK: int arr[8] = {0};

Ключевое слово constexpr можно также указать при инициализации переменной. Изменить значение такой переменной после инициализации будет нельзя:

constexpr int x = 5 + 3;
int arr[x] = {0}; // OK: int arr[8] = {0};

В данном случае вместо constexpr можно использовать ключевое слово const:

const int x = 5 + 3;
int arr[x] = {0}; // OK: int arr[8] = {0};

Использование ключевого слова constexpr имеет множество ограничений, причем их список сильно зависит от используемого стандарта языка C++. За подробностями обращайтесь к документации.

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов