"inline" in c++

Fermé
bhr_mhb Messages postés 3 Date d'inscription mercredi 27 mars 2013 Statut Membre Dernière intervention 12 avril 2013 - 11 avril 2013 à 22:57
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 22 avril 2013 à 19:50
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 811
19 avril 2013 à 00:36
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
19 avril 2013 à 12:28
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 811
20 avril 2013 à 00:32
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 vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
21 avril 2013 à 14:38
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 811
Modifié par mamiemando le 22/04/2013 à 10:43
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 vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
22 avril 2013 à 12:04
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