Funciones en línea en C++

Suraj P 12 octubre 2023
  1. Por qué se utilizan funciones inline en C++
  2. Implementar funciones en línea en C++
  3. Implementar constructor y destructor como funciones en línea en C++
  4. Ventajas y desventajas de implementar funciones en línea en C++
Funciones en línea en C++

Este artículo discutirá las funciones inline en C++, cómo implementarlas y las ventajas y desventajas de usarlas.

Por qué se utilizan funciones inline en C++

Cada vez que ejecutamos un programa, la CPU almacena la dirección de memoria de la instrucción después de la llamada a la función; copia los argumentos en la pila y transfiere el control a la función especificada.

Luego, la CPU ejecuta el código, devuelve el valor en una ubicación de memoria específica y vuelve a la función llamada nuevamente. Podría crear una sobrecarga adicional si la mayor parte del tiempo se dedica a cambiar en lugar de ejecutar la función.

Esta sobrecarga es insignificante en funciones grandes que realizan tareas complejas que requieren un uso intensivo de la CPU, ya que la mayor parte del tiempo se dedica solo a la ejecución.

Sin embargo, esta sobrecarga se vuelve significativa cuando tenemos muchas funciones pequeñas que solo realizan tareas básicas; la mayor parte del tiempo se dedica a cambiar, y poco o nada se dedica a la ejecución.

Por lo tanto, el concepto en línea puede ser útil cuando tenemos muchas funciones pequeñas para ahorrar tiempo de conmutación y aumentar la eficiencia.

Cada vez que una función se declara como en línea en el código en tiempo de compilación, en lugar de asignar una dirección en la llamada a la función, copia todo el código de la función y lo coloca en ese lugar.

Sintaxis:

inline return_type function_name(arguments)
{
...
}

Una función en línea es solo una solicitud al compilador, por lo que el compilador puede ignorarla si:

  1. la función tiene variables estáticas;
  2. la función tiene sentencias goto o switch;
  3. la función es recursiva;
  4. la función tiene bucles.

El concepto de en línea se usa generalmente con clases.

Implementar funciones en línea en C++

Código de ejemplo:

#include <iostream>
using namespace std;

class myClass {
  int a, b;

 public:
  void sum();
};

inline void myClass ::sum() {
  cout << "Enter first value:";
  cin >> a;
  cout << "Enter second value:";
  cin >> b;
  cout << "Sum of two numbers is " << a + b << endl;
}

int main() {
  cout << "Program using inline function\n";
  myClass obj;
  obj.sum();
}

En el código anterior, declaramos la función como en línea mientras la definimos porque es una buena práctica de programación escribir la definición real de la función en línea fuera de la clase que dentro de la clase.

Sin embargo, una definición de función en una clase es una definición de función en línea por defecto, incluso sin usar la palabra clave en línea.

Producción :

Program using inline function
Enter first value:12
Enter second value:13
Sum of two numbers is 25

Implementar constructor y destructor como funciones en línea en C++

Usando el ejemplo anterior y haciendo funciones en línea fuera de la clase al definirla, podemos incluso hacer constructor y destructor como en línea.

Código de ejemplo:

#include <iostream>
using namespace std;

class myClass {
  int a, b;

 public:
  myClass();
  ~myClass();
  void sum();
};

inline myClass::myClass() {
  a = 100;
  b = 200;
}

inline myClass::~myClass() { cout << "destroying the object\n"; }

inline void myClass ::sum() {
  cout << "Sum of two numbers is " << a + b << endl;
}

int main() {
  cout << "Program using inline function\n";
  myClass obj;
  obj.sum();
}

Producción :

Program using inline function
Sum of two numbers is 300
destroying the object

Ventajas y desventajas de implementar funciones en línea en C++

Ahora, veamos algunas de las ventajas de implementar funciones en línea:

  1. Se reduce la sobrecarga de la llamada de función.
  2. Ahorra la sobrecarga de una llamada de retorno de una función.
  3. Ahorra la sobrecarga de empujar y sacar variables en la pila.

Aunque útil, también tiene algunas desventajas:

  1. El tamaño del archivo ejecutable binario puede aumentar si usamos demasiadas funciones en línea porque aquí ocurrirá la duplicación del mismo código.
  2. Demasiadas funciones en línea pueden reducir la tasa de aciertos de caché para las instrucciones, lo que afecta la velocidad de obtención de instrucciones de la memoria caché a la memoria principal.
  3. En los sistemas embebidos donde el tamaño del código es más importante que la velocidad, las funciones en línea no serán útiles.
  4. Podría ocurrir una paliza, lo que degradará el rendimiento de la memoria de la computadora.
Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Artículo relacionado - C++ Function