Les inlines en C++

Définition
Le mot-cléinlineest 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é
inlinede 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é
inlinene s'utilise qu'à la déclaration. L'appel d'une fonction reste le même que la fonction soit
inlineou 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" (noninlineet 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é
inlinepermet 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
templateest toujours déclarée dans un header. Elle peut de surcroît être
inline.