Les fonctions inline sont des fonctions pour lesquelles le compilateur peut (mais n'est pas obligé) remplacer l'appel par une insertion directe du code de la fonction à l'emplacement de l'appel. Pour cela, on utilise le mot-clé inline.
inline donne un conseil au compilateur, mais n'est pas une obligation : il peut être ignoré si la fonction est trop complexe.Limites et risques :
Exemple :
inline int add(int a, int b) { return a + b; } struct X { int get() const { return value; } int value; }; // get() sera considéré comme inline
Question : Le mot-clé inline garantit-il que la fonction sera intégrée à tous les points d'appel ?
Réponse : Non. Le compilateur décide de l'insertion de la fonction inline de manière autonome, en fonction des heuristiques internes. inline n'est qu'une recommandation.
Histoire
Dans un système financier, un logger utilisé fréquemment a été écrit avec des dizaines de grandes fonctions inline. Après la croissance du système, la taille du binaire a augmenté exponentiellement, entraînant un temps de liaison accru et une réduction de l'efficacité du cache sur le serveur.
Histoire
Lors de la migration d'un logiciel multiplateforme, il a été découvert que certains compilateurs (par exemple, MSVC et GCC) traitent différemment le inline : certaines fonctions n'étaient pas développées en inline, d'autres l'étaient, ce qui causait des différences de vitesse et de taille des applications à reproduire difficilement entre les plateformes.
Histoire
Un développeur a déclaré des fonctions inline uniquement dans le fichier header, mais a déplacé l'implémentation dans un fichier cpp distinct. En conséquence, lors de la liaison, des erreurs de définition multiple ou de référence externe non résolue se produisaient, car les fonctions inline doivent être définies précisément dans les en-têtes.