Les inlines en C++

mamiemando Messages postés 31466 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 septembre 2022 - Modifié le 30 mai 2022 à 03:19

Définition

Le mot-clé
inline
est utilisé en C++ et s'applique à une fonction ou une méthode. Il indique au compilateur que chaque appel à la fonction inline doit être remplacé par le corps de cette fonction. Ceci accélère le programme mais génère un binaire (exécutable ou librarie) plus gros. C'est pourquoi on réserve le mot clé
inline
de préférence aux fonctions / méthodes "courtes".

On l'utilise typiquement pour les accesseurs (getters, setters), car le code de ces méthodes est généralement très court.

Le mot clé
inline
ne s'utilise qu'à la déclaration. L'appel d'une fonction reste le même que la fonction soit
inline
ou non.

Exemple

#include <iostream> 

inline void ma_fonction(){ 
    std::cout << "bonjour" << std::endl; 
} 

class ma_structure_t
{ 
  protected: 

    int x; 

  public:

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

    inline void set_x(int x0) { 
      x = x0; 
    }
}; 

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

Inlines, templates et headers

Pour rappel, une fonction / méthode "classique" (non
inline
et non
template
) ne devrait jamais être implémentée dans un header, car si ce header est inclus à plusieurs endroits, le compilateur retournera une erreur de définition multiple au moment du linkage.

Le mot-clé
inline
permet de déclarer et d'implémenter des fonctions directement dans un header (.hpp) sans risque de multi-définition au moment du linkage. En effet, les appels aux fonctions / méthodes inline ont tous été remplacés par leur corps avant la compilation proprement dite.

Une fonction / méthode
template
est toujours déclarée dans un header. Elle peut de surcroît être
inline
.