-
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 ;)
-
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
-
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 :)
-
En es-tu sur ?
J'ai trouvé ceci sur internet mais j'ai du mal à comprendre : http://jlecomte.ifrance.com/c++/c++-...=-1#[28.6]
-
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 ??
-
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.
-