"inline" in c++

bhr_mhb Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
salam , s'il vous plait quel est le role du qualificatif "inline" devant la déclaration d'une fonction membre en c++?
je suis en attente de vos réponses favorables**

1 réponse

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
une question à ce sujet, comment se démerde le compilateur dans le cas d'une fonction inline définie dans .cpp ?
truc.h
  inline void f();
truc.cpp
  #include "truc.h"
  void f(){cout<<"plop";};
util.cpp
   #include "truc.h"
   int fonction()
   {
            f();
          return 0;
    }
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
En fait une fonction inline est substituée à la compilation par son code. Le principal intérêt que je vois c'est de pouvoir implémenter des fonctions triviales (accesseurs) directement dans le ".hpp" sans quoi des multi-définitions pourraient avoir lieu si ce header est inclu à plusieurs endroits.

L'autre intérêt de inline c'est que grâce à cette substitution tu évites un appel de fonction (pas besoin d'empiler les paramètres sur la pile etc...) donc tu gagnes un peu en perfomances. Par contre le code peut devenir plus volumineux puisque le code de la fonction inline est "dupliqué" à plusieurs endroits. C'est pourquoi on le réserve surtout aux fonctions "courtes" et appelées fréquemment.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
tu n'as pas compris ma question.
si le corps de la fonction est dans le .cpp, comment l'appeler d'un autre .cpp ? Le compilateur n'y a pas accès.
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Pardon tu as raison j'ai mal compris ta question. Il faut que la fonction soit déclarée et implémentée dans le .hpp. Sinon ça ne compile pas (il n'y a pas de symbole vers f, donc au moment de linker la fonction qui appelle f, ça plante).

a.hpp

#ifndef A_HPP 
#define A_HPP 

#include <iostream> 

inline void f() { 
    std::cout << "plop" << std::endl; 
}

#endif 


b.cpp

#include "a.hpp" 

int main() { 
    f(); 
    return 0; 
}


Bonne chance
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Ok, c'est bien ce qui me semblait. Le lien que tu as mis laisse entendre le contraire.
Je pense qu'il faudrait dire qu'une fonction DOIT être mise dans le fichier en-tête, sous peine de n'être utilisable que dans le fichier source où elle est définie.
0