Qué es la función inline en C++
El propósito de este artículo es definir la función inline en C++ y algunos ejemplos de su funcionamiento.
¿Qué es la función inline en C++?
La palabra reservada inline es utilizada en C++ y se aplica a una función. Indica al compilador que cada llamada a la función deberá ser reemplazada por el cuerpo de esta función. En la práctica, la función inline se utiliza sólo cuando las funciones son pequeñas para evitar que se genere un ejecutable de tamaño considerable. La palabra reservada inline tiene la ventaja de acelerar un programa si este la invoca regularmente. Permite reducir considerablemente el código, en particular para los accesadores de una clase, que son típicamente una función de una línea.
¿Qué ejemplos de esta función podemos explorar?
Ejemplo 1
main.cpp:
#include <iostream> inline void mi_funcion(){ std::cout << "me gustan los tapires" << std::endl; } class mi_estructura_t{ protected: int x; public: mi_estructura_t(int x0):x(x0){} inline int get_x() const{ return x; } }; int main(){ mi_funcion(); mi_estructura_t s(7); std::cout << s.get_x() << std::endl; return 0;
Inline y encabezados
Inline permite declarar e implementar funciones directamente en el encabezado (.hpp) sin peligro de multi-definición. El símbolo de la función inline no aparece nunca explícitamente durante el enlazado, pues todos los llamados a esta función han sido reemplazados. Recordemos que si una función no es inline, es implementada en un encabezado y este es incluido en varios lugares, el compilador devolverá un error de definición múltiple.
Entre las funciones template, únicamente las funciones inline pueden ser implementadas en el encabezado. Una función template puede perfectamente ser inline. Si deseamos codificar una función inline declarada en un encabezado (.hpp) pero implementada en un archivo fuente (.cpp), únicamente el prototipo del encabezado debe contener la palabra reservada inline.
Ejemplo 2
archivo.hpp:
inline void f();
archivo.cpp:
#include <iostream> #include "fichier.hpp" void f(){ std::cout << "plop !" << std::endl; }