Немедленные функции в 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 перед типом возвращаемого значения и используются для сокращения времени, затрачиваемого на оценку константных выражений, поскольку они оценивают константные выражения только один раз во время компиляции, а не при каждом запуске/выполнении программы. .
  • Следовательно, это экономит значительное количество времени, когда есть необходимость выполнить программу с некоторыми константными выражениями несколько раз.
C++