Funciones inmediatas en C++

En este artículo, discutiremos la función inmediata utilizada en C++ .

Función inmediata :

  • En C++20, una función inmediata es una función en la que cada llamada a la función, ya sea directa o indirectamente, produce una expresión constante en tiempo de compilación.
  • Estas funciones se declaran usando una palabra clave consteval antes de su tipo de retorno.

A continuación se dan algunos términos importantes relacionados con la función inmediata:

función constexpr

  • El especificador constexpr declara que es posible evaluar el valor de una función o variable en tiempo de compilación.
  • Dichas variables y funciones se pueden usar donde solo se permiten expresiones constantes en tiempo de compilación .
  • Estas funciones se utilizan para mejorar el rendimiento del programa al realizar cálculos en tiempo de compilación en lugar de tiempo de ejecución.
  • Estas funciones pueden ser realmente útiles cuando se ejecuta un programa varias veces, ya que las expresiones constantes solo se evaluarán una vez durante el tiempo de compilación.

A continuación se muestra el programa C++ que ilustra el uso de la función constexpr:

C++14

// C++ program demonstrates the use of
// constexpr
#include <iostream>
using namespace std;
  
// Constexpr function if replaced with
// consteval, program works fine
constexpr int fib(int n)
{
    // Base Case
    if (n <= 1)
        return n;
  
    // Find the Fibonacci Number
    return fib(n - 1) + fib(n - 2);
}
  
// Driver Code
int main()
{
    // Constant expression evaluated
    // at compile time
    const int val = fib(22);
  
    cout << "The fibonacci number "
         << "is: " << val << "\n";
  
    return 0;
}
Producción

The fibonacci number is: 17711

Explicación:

  • En el ejemplo anterior, fib() se llama con 22 .
  • Por eso, es una expresión constante y, por lo tanto, se puede evaluar en tiempo de compilación .
  • El programa no muestra ningún error al usar constexpr o consteval .
  • Pero, si se usa la expresión constante mientras se usa la palabra clave consteval, el programa producirá un error.

función consteval :

  • En la función consteval , cada llamada a la función debe producir directa o indirectamente una expresión constante en tiempo de compilación .
  • La función consteval es la misma que la función constexpr excepto que si la llamada a una función consteval no se evalúa como una expresión constante en tiempo de compilación, entonces el programa da un error mientras que no es así en el caso de una función constexpr .
  • La constexpr especifica que el valor de una variable o función puede aparecer en expresiones constantes.
  • La clave a tener en cuenta aquí es que dice que una función puede aparecer en expresiones constantes, no dice que la función tiene que serlo, mientras que una consteval especifica que una función es una función inmediata, es decir, cada llamada a la función debe producir una constante de tiempo de compilación.

A continuación se muestra el programa C++ que ilustra el uso de la función consteval:

C++14

// C++ program illustrating the use
// of the consteval function
  
#include <iostream>
using namespace std;
  
// If constexpr replaces with consteval
// program gives an error in C++20
constexpr int fib(int n)
{
    // Base Case
    if (n <= 1)
        return n;
  
    return fib(n - 1) + fib(n - 2);
}
  
// Driver Code
int main()
{
    // This expression is not evaluated
    // at compile time
    const int val = fib(rand() % 20);
  
    cout << "The fibonacci number is: "
         << val << "\n";
  
    return 0;
}
Producción

The fibonacci number is: 2

Explicación:

  • En el ejemplo anterior, se usa rand( ) y rand() se evalúa en tiempo de ejecución, no en tiempo de compilación, por lo que la expresión ya no es una expresión constante, es por eso que nuestra función consteval ahora producirá un error.
  • Si bien la función constexpr todavía funciona bien y la razón es que no tiene que estar en tiempo de compilación.

Conclusión:

  • De la discusión anterior, se puede concluir que la función Inmediato es consteval function , que funciona bien solo cuando cada llamada a la función debe producir directa o indirectamente una expresión constante en tiempo de compilación; de lo contrario, da un error.
  • Estas funciones se declaran usando una palabra clave consteval antes de su tipo de devolución y se usan para reducir el tiempo que se consume en evaluar las expresiones constantes, ya que evalúan las expresiones constantes solo una vez durante el tiempo de compilación y no durante cada ejecución/ejecución del programa. .
  • Por lo tanto, ahorra una cantidad considerable de tiempo cuando es necesario ejecutar un programa con algunas expresiones constantes varias veces.

Publicación traducida automáticamente

Artículo escrito por ajaysharma132 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *