En C et C++ archaïque, inline
c'est comme register
: une suggestion (rien de plus qu'une suggestion) au compilateur sur une optimisation possible.
Dans le C++ moderne, inline
indique à l'éditeur de liens que, si plusieurs définitions (pas de déclarations) sont trouvées dans différentes unités de traduction, elles sont toutes identiques, et l'éditeur de liens peut librement en garder une et rejeter toutes les autres.
inline
est obligatoire si une fonction (aussi complexe ou "linéaire" soit-elle) est définie dans un fichier d'en-tête, afin de permettre à plusieurs sources de l'inclure sans obtenir une erreur de "définition multiple" par l'éditeur de liens.
Les fonctions membres définies à l'intérieur d'une classe sont "en ligne" par défaut, tout comme les fonctions modèles (contrairement aux fonctions globales).
//fileA.h
inline void afunc()
{ std::cout << "this is afunc" << std::endl; }
//file1.cpp
#include "fileA.h"
void acall()
{ afunc(); }
//main.cpp
#include "fileA.h"
void acall();
int main()
{
afunc();
acall();
}
//output
this is afunc
this is afunc
Notez l'inclusion de fileA.h dans deux fichiers .cpp, ce qui donne deux instances de afunc()
. L'éditeur de liens rejettera l'un d'entre eux. Si aucun inline
est spécifié, l'éditeur de liens se plaindra.
52 votes
C'est l'une de ces questions où la connaissance commune est erronée. Tout le monde a répondu avec la réponse standard de Comp Sci. (L'insertion économise le coût des appels de fonction mais augmente la taille du code). Foutaises. Il fournit un mécanisme simple permettant au compilateur d'appliquer plus d'OPTIMISATIONS.
37 votes
C'est une de ces réponses qui se présentent comme des commentaires. Si vous n'aimez pas une des réponses qui ont été postées, postez votre propre réponse et voyez ce que ça donne.
11 votes
La base de cette question est erronée. Les fonctions en ligne du C++ n'ont pas grand-chose à voir avec les fonctions en ligne des compilateurs lors de la compilation. Il est regrettable que
inline
est un mot-clé c++ et que l'inlining est une technique d'optimisation du compilateur. Voir cette question " quand dois-je écrire le mot-cléinline
pour une fonction/méthode " pour la bonne réponse.3 votes
@JoseVega Votre lien a été modifié - le lien actuel est le suivant exforsys.com/tutorials/c-plus-plus/inline-functions.html