Немедленные функции в C++
Опубликовано: 14 Сентября, 2022
В этой статье мы обсудим немедленную функцию, используемую в C++.
Немедленная функция :
- В C++20 непосредственная функция — это функция, каждый вызов которой прямо или косвенно создает константное выражение времени компиляции.
- Эти функции объявляются с использованием ключевого слова consteval перед типом возвращаемого значения.
Ниже приведены некоторые важные термины, относящиеся к непосредственной функции:
функция constexpr :
- Спецификатор constexpr объявляет, что можно оценить значение функции или переменной во время компиляции.
- Затем такие переменные и функции можно использовать там, где разрешены только константные выражения времени компиляции.
- Эти функции используются для повышения производительности программы за счет выполнения вычислений во время компиляции, а не во время выполнения.
- Эти функции действительно могут быть полезны при многократном выполнении программы, поскольку константные выражения будут оцениваться только один раз во время компиляции.
Ниже приведена программа C++, иллюстрирующая использование функции constexpr:
Объяснение:
- В приведенном выше примере fib() вызывается с 22 .
- Вот почему это постоянное выражение, поэтому его можно вычислить во время компиляции.
- Программа не показывает ошибок ни при использовании constexpr , ни при использовании consteval .
- Но, если константное выражение используется при использовании ключевого слова consteval, программа выдаст ошибку.
функция Констеваля :
- В функции consteval каждый вызов функции должен прямо или косвенно создавать постоянное выражение времени компиляции.
- Функция consteval аналогична функции constexpr, за исключением того, что если вызов функции consteval не приводит к постоянному выражению времени компиляции, то программа выдает ошибку, в то время как в случае функции constexpr это не так.
- Constexpr указывает, что значение переменной или функции может появляться в константных выражениях.
- Ключевым моментом здесь является то, что он говорит, что функция может появляться в константных выражениях, он не говорит, что функция должна быть, в то время как consteval указывает, что функция является непосредственной функцией, то есть каждый вызов функции должен создавать константу времени компиляции.
Ниже приведена программа C++, иллюстрирующая использование функции consteval:
Объяснение:
- В приведенном выше примере используется rand(), и rand() оценивается во время выполнения, а не во время компиляции, и поэтому выражение больше не является постоянным выражением, поэтому наша функция consteval теперь будет выдавать ошибку.
- В то время как функция constexpr по-прежнему работает нормально, и причина в том, что она не обязательно должна быть во время компиляции.
Вывод:
- Из приведенного выше обсуждения можно сделать вывод, что функция Immediate — это consteval function , которая отлично работает только тогда, когда каждый вызов функции должен прямо или косвенно производить постоянное выражение времени компиляции, иначе выдает ошибку.
- Эти функции объявляются с использованием ключевого слова consteval перед типом возвращаемого значения и используются для сокращения времени, затрачиваемого на оценку константных выражений, поскольку они оценивают константные выражения только один раз во время компиляции, а не при каждом запуске/выполнении программы. .
- Следовательно, это экономит значительное количество времени, когда есть необходимость выполнить программу с некоторыми константными выражениями несколько раз.