Je cours fréquemment dans de grandes classes non-template en C++ où les méthodes simples sont définies directement dans le corps de la classe dans le fichier d'en-tête au lieu de séparément dans le fichier d'implémentation. Par exemple:Pourquoi les méthodes C++ sont-elles parfois définies dans les classes?
class Foo {
int getBar() const { return bar; }
...
};
Pourquoi faire cela? Il semble qu'il y ait des inconvénients. L'implémentation n'est pas aussi cachée qu'elle devrait l'être, le code est moins lisible, et il y aurait aussi une charge accrue sur le compilateur si le fichier d'en-tête de la classe est inclus dans de nombreux endroits différents. Je pense que les gens ont l'intention que ces fonctions soient intégrées dans d'autres modules, ce qui pourrait améliorer considérablement les performances. Cependant, j'ai entendu dire que les plus récents compilateurs peuvent faire des inlining (et d'autres optimisations interprocédurales) au moment de la liaison entre les modules. Quelle est la portée de ce type d'optimisation des liens, et est-ce que cela rend ces définitions inutiles? Y a-t-il d'autres bonnes raisons pour ces définitions?
Oui, mais "inline par défaut" ne signifie pas que le compilateur va les incorporer, seulement que vous n'avez pas à ajouter manuellement le * hint * que le mot-clé "inline" est vraiment. –