Les inlines en C++

Septembre 2016


Signification


Le mot-clé inline est utilisé en C++ et s'applique à une fonction. Il indique au compilateur que chaque appel à la fonction inline devra être remplacé par le corps de cette fonction. Afin de générer un exécutable de taille raisonnable, il est donc en pratique utilisé pour des fonctions "courtes" en terme de nombre d'instructions.

Le mot clé inline présente l'avantage d'accélérer un programme si celui-ci fait régulièrement appel à la fonction inline. Il permet de condenser sensiblement le code, en particulier pour les accesseurs d'une classe. Un accesseur de classe est typiquement une fonction d'une ligne

Exemple 1


main.cpp
#include <iostream> 
inline void ma_fonction(){ 
  std::cout << "j'aime les tapirs" << std::endl; 
} 

class ma_structure_t{ 
  protected: 
    int x; 
  public: 
    ma_structure_t(int x0):x(x0){} 
    inline int get_x() const{ 
      return x; 
    } 
}; 

int main(){ 
  ma_fonction(); 
  ma_structure_t s(7); 
  std::cout << s.get_x() << std::endl; 
  return 0; 
} 

Inline et headers


Le inline permet de déclarer et d'implémenter des fonctions directement dans un header (.hpp) sans risque de multi-définition. En effet le symbole de la fonction inline n'apparaît jamais explicitement au moment du linkage puisque les appels à cette fonction ont tous été remplacés. Rappelons que si une fonction n'est pas inline, est implémentée dans un header, et que ce header est inclus à plusieurs endroits, le compilateur retournera une erreur de définition multiple.

Rappelons qu'hormis les fonctions templates, seules les fonctions inline peuvent être implémentées dans le header. Une fonction template peut tout à fait être inline.

Exemple 2


fichier.hpp
inline void f();

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

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

A voir également :

Ce document intitulé «  Les inlines en C++  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.