constexpr спецификатор С++11
constexpr спецификатор С++11 означающий что значение переменной или результат работы функции должны рассчитываться на этапе компиляции.
Для constexpr функции если значение параметра не известно на этапе компиляции, то оно будет вычислено, как обычно, в runtime.
Для constexpr переменной если присваиваемое значение неизвестно на этапе компиляции, то произойдет ошибка компиляции.
constexpr переменная является константой (const), но константа (const) не является constexpr переменной.
#include <iostream> // cout
int sqr(int a){
return a * a;
}
constexpr int ce_sqr(int a){
return a * a;
}
int main(){
constexpr int b1 = sqr(2); // Ошибка функция возвращает не константное значение
constexpr int b2 = ce_sqr(2); // ОК
int c1 = 2; // Не константная переменная
constexpr int b3 = ce_sqr(c1); // Ошибка! с - не константная переменная
const int c2 = 2; // Константная переменная
constexpr int b4 = ce_sqr(c2); // OK
}
2024-07-23
Понравилась страница?
Добавить в закладки
Или поделиться!
Связанные темы
Оператор and альтернатива оператору "Логическое И" && Оператор and_eq - альтернатива оператору &= (Побитовое И) asm ключевое слово С++. Включение блока кода на языке ассемблер в код С++. auto C++, автоматическое вычисление компилятором типа переменной bitand оператор С++ альтернативный "Побитовое И" & bitor оператор языка С++ аналогичный "Побитовому ИЛИ" | bool логический тип данных в С++ break оператор завершения ближайшего цикла или case в С++ case оператор С++ для выполнения блока кода при совпадении целочисленного значения в операторе switch catch оператор С++ для ловли исключений class ключевое слово C++ для задания класса compl оператор C++ альтернативный "Побитовая инверсия" ~ const ключевое слово С++ consteval спецификатор С++20 указывающий что каждый вызов функции должен создавать константы времени компиляции constexpr спецификатор С++11 означающий что значение переменной или результат работы функции должны рассчитываться на этапе компиляции const_cast оператор приведения типов для добавления или удаления cv-квалификаторов С++ dynamic_cast С++ преобразование указателей или ссылок на объект false C++, логическое "Ложно" C++ inline C++ вставка кода функции в месте вызова Ключевые слова в С++ namespace С++ пространство имен noexcept в C++ register С++ зарезервированное ключевое слово return C++ выход из функции с возвратом результата Выражения rvalue, lvalue, gvalue, xvalue, prvalue. throw C++ принудительное выбрасывание исключений true C++ логическое истинно и любое число кроме нуля try C++ начинает блок кода в котором ловятся исключения using C++ создание псевдонимов и импорт из пространства имен volatile С++ запрет оптимизации объекта который может измениться извне