Ecoute, je ne veux pas polémiquer, je vais tout de même essayer dêtre un peu plus clair :
1) quand je dis quelque chose au négatif, ça veut juste dire que ce n'est pas le cas et non pas que le contraire est vrai (ou une quelconque interprétation). (cf : ca renvoyait pas forcement 4 octets)
2) je n'ai pas dit qu'on ne pouvait jamais écrire void, le problème se pose à l'utilisation de ce sur quoi il pointe.
3) Pour le dynamic_cast, 5.2.7 (dans le draft que j'ai, désolé de ne pas avoir acheté la norme), lexemple donné est exactement ce que je voulais dire :
struct B {};
struct D : B {};
void foo(D* dp)
{
B* bp = dynamic_cast<B*>(dp); // equivalent to B* bp = dp;
} |
Ce que je voulais dire c'est seulement que bp n'est pas toujours égal à dp (bien que ce soit un exemple un peu trop simpliste).
Voilà un exemple qui le montre avec gcc normalement (bien sûr le fait que ladresse soit la même ou non dépend de limplémentation) :
Code :
- #include <iostream>
- struct s{
- int a;
- };
- struct s1{
- int a;
- };
- struct s2 : s, s1{
- int a;
- };
-
- using namespace std;
- int main (int argc, char *argv[])
- {
- s2 *toto = new s2;
- s1 *tata = dynamic_cast<s1*>(toto);
- // j'affiche bêtement (fait en 20 secondes power)
- cout << toto << " " << tata << endl;
- // jaime bien mettre des trucs
- // qui ne sont pas utile mais que lon peut mettre
- return 0 ;
- }
|
Jespère ne pas avoir été trop long, mais jessaye dêtre le plus précis possible.
PS : Dans le dernier exemple remplace s2* par void* pour voir si les dynamic_cast n'ont pas besoin de connaître le type pointé.
PS2 : Ce n'est pas un cours, si c'est long c'est uniquement pour éviter que ce soit mal interpréter même si je sais que ça peut encore l'être.
PS3 : Je ne sais pas comment Taz sait que c'est HS sans le lire mais bon ...
Message édité par Tarabiscote le 17-06-2005 à 18:18:45