domingo, 28 de noviembre de 2010

Funcion inline ( puntos extra)

La palabra reservada inline es utilizada en C++ y se aplica a una función. Esta indica al compilador que cada llamado a la función inline deberá ser reemplazado por el cuerpo de esta función. En la practica la función inline es utilizado solo cuando las funciones son pequeñas para evitar generar un ejecutable de tamaño considerable.

La palabra reservada inline tiene la ventaja de acelerar un programa si éste invoca regularmente a la función inline. Permite resumir considerablemente el código, en particular para los accesadores de una clase. Un accesador de clase es típicamente una función de una línea.

ejemplo :

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 ya que 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 encabezado es incluido en varios lugares, el compilador devolverá un error de definición múltiple.

Recordemos que entre las funciones templates, ú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) sólo el prototipo del encabezado debe contener la palabra reservada inline.  
archivo.hpp
inline void f();


archivo.cpp:

#include <iostream>
#include "fichier.hpp"

void f(){
  std::cout << "plop !" << std::endl;

1 comentario:

  1. Tú sí entendiste de qué se trata :) +3 en segundas (me sigue molestando la falta de referencias)

    ResponderEliminar