IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

inline et virtual


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut inline et virtual
    Bonjour,

    Imaginons que j'ai une classe "renderer" qui est une classe virtuel pure.
    Une autre classe "rendererOGL" qui est dérivée de "renderer".
    Et pour finir une classe "afficheTriangle" qui est dérivée de "rendererOGL".

    Si je met toutes les fonctions membres des classes "renderer" et "rendererOGL" en inline : est-ce que les fonctions seront bien inline dans "afficheTriangle" ?

    Merci de ne pas me répondre par "oui" ou par "non", je préfère une explication

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Tu peux sans aucun probleme créer des méthodes qui sont à la fois virtuelle et inline, car le mot clé inline ne fait que demander au compilateur "place les instructions de telle routine à l'endroit où elle est appelée".

    L'astuce, c'est que le compilateur peut décider de le faire... ou non...

    Il y a eu récemment ==>un sujet<== sur ce meme forum concernant les fonctions inline, je crois que tu y trouveras toutes les réponses que tu peux souhaiter
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Par défaut
    bonjour,

    inline est destiné au compilateur et non au programme. Cela veut dire que c'est le compilo qui décide d'inliner ou pas (et pas nous).

    D'autre part inline n'est pas forcément synonyme "d'aller plus vite", on peut avoir de surprises notamment avec les fonctions ... virtual qui sont très difficiles à inliner.

    Donc :
    1/ on ne pas garantir que ta fonction sera inlinée
    2/ mm si c'est le cas c'est pas du tout évident que tu gagnes grand chose sur tes fonctions virtual.
    3/ Il ya un paragraphe dans la FAQ C++ dessus

    Bon courage

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    En es-tu sur ?

    J'ai trouvé ceci sur internet mais j'ai du mal à comprendre : http://jlecomte.ifrance.com/c++/c++-...=-1#&#91;28.6]

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    C'est accepté d'un point de vue syntaxique (inline virtual void Fonction()), mais uniquement parce que la directive inline est purement indicative.

    Concrètement, une fonction virtuelle n'a aucune chance d'être inlinée, tout simplement parce qu'au moment de la compilation, sauf exception, la fonction réellement appelée n'est pas connue, donc la substitution de code ne peut se faire.

    Autre argument, les fonctions virtuelles sont appelées au travers d'une table de pointeurs créée au moment de l'instanciation de l'objet, selon son type; comment cela pourrait-il donc fonctionner si certaines des fonctions pointées sont inlinées ??

  6. #6
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    N'utilise pas inline, cela ne va rien t'apporter en termes de performance...

    inline est utilisé dans de rare cas de fonction simple à appeler.
    Le compilateur qui prendra de toute façon la décision final, le fera bien mieux que toi. Car s’il peut, et si cela lui semble logique, il ira inliner la fonction à ta place.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    Merci pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Virtual, inline, explicit ?
    Par mima_mine dans le forum Débuter
    Réponses: 16
    Dernier message: 09/11/2009, 16h42
  2. Déclenchement Programme sur Virtual Key
    Par Tom-G dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 09/05/2003, 12h58
  3. Virtual-key code
    Par lyrau dans le forum Windows
    Réponses: 2
    Dernier message: 29/03/2003, 19h22
  4. [Turbo C++] Fonciton containing for are not expanded inline
    Par BuG dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 17/02/2003, 06h48
  5. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2002, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo