"inline" in c++

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

  1. Modérateur
    0
    1. Contributeur
      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
    2. Modérateur
      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
    3. Contributeur
      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
    4. Modérateur
      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
    5. Contributeur
      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