-
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.
-