virtual inline

virtual inline - C++ - Programmation

Marsh Posté le 23-12-2008 à 11:51:28    

Salut,
 
est -il possible de déclarer une fonction virtual inline ?
 
Merci
 

Reply

Marsh Posté le 23-12-2008 à 11:51:28   

Reply

Marsh Posté le 23-12-2008 à 12:26:50    

Oui

Reply

Marsh Posté le 23-12-2008 à 18:22:16    

merci

Reply

Marsh Posté le 23-12-2008 à 19:25:29    

2eme question : cela pose t-il un problème à la compilation et/ou l'exécution quand l'appel à une fonction virtual inline se fait à partir d'un objet dérivé?


Message édité par frenchtoucco le 23-12-2008 à 20:39:43
Reply

Marsh Posté le 23-12-2008 à 20:38:33    

personne ne sait :( ?

Reply

Marsh Posté le 23-12-2008 à 23:28:33    

non ça ne pose pas de problème.

Reply

Marsh Posté le 24-12-2008 à 00:31:41    

ce qui me surprend, c'est que je pensais qu'à la compilation, le compilateur ne sachant pas qu'elle est le type de l'objet qui appelle la fonction déclaré virtual(i.e:fonction de la classe mère ou bien fonction de la classe fille?) ne puisse pas être en mesure d'inliner le code... j'ai faux ?


Message édité par frenchtoucco le 24-12-2008 à 00:32:07
Reply

Marsh Posté le 24-12-2008 à 09:19:48    

Non. C'est tout à fait justement. Seulement rien ne t'empêche de déclarer virtual inline et rien n'empêche un compilateur d'inliner un appel à une fonction virtual s'il sait la résoudre statiquement.

Reply

Marsh Posté le 24-12-2008 à 10:09:30    

est ce que je pourrais avoir un exemple de code svp, qui mettre en évidence l'appel à une fonction virtual inline à partir d'une classe fille que le compilateur sache résoudre statiquement:

Code :
  1. class A
  2. {
  3. virtual inline f(){...}
  4. };
  5. class B:public A
  6. {
  7. virtual inline f(){...}
  8. };
  9. main()
  10. {
  11. A * a;
  12. a= new B();
  13. a->f();
  14. }


Dans ce cas le compilateur ne peut pas inliner a->f() à priori si j'ai bien compris, mais dans quel cas peut-il le faire comme tu me l'a souligné?


Message édité par frenchtoucco le 24-12-2008 à 10:12:57
Reply

Marsh Posté le 24-12-2008 à 12:14:43    

Dans un contexte statique:

Code :
  1. virtual void B::f() { A::f(); }
  2. // ou bien
  3. B b;
  4. b.f();

Reply

Marsh Posté le 24-12-2008 à 12:14:43   

Reply

Marsh Posté le 25-12-2008 à 20:00:46    

frenchtoucco a écrit :

Salut,
 
est -il possible de déclarer une fonction virtual inline ?
 
Merci
 


On définit une fonction inline, plutôt que de la déclarer inline. De plus si tu définit la méthode dans la classe, elle sera de-facto inline.
Tes doutes vis à vis de la capacité du compilo à inliner un appel virtuel sont justifiés, mais comme le dit Taz, le compilo s'en sort bien tout seul.

Reply

Marsh Posté le 26-12-2008 à 17:27:39    

ok thx

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed