Bonjour,
J’ai un comportement que je n’arrive pas à expliquer. Par chance, j’ai réussi à réaliser un ECM qui met en évidence ce problème en un minimum de lignes.
Je souhaite avoir une classe et deux constructeurs: l’un sans parametre (ie. void
), qui va appeler le second en passant un paramètre par défaut1. Dans mon ECM, la classe Foo
se comporte parfaitement comme attendue, mais Bar
appelle en boucle le premier constructeur. La seule différence : le type du paramètre. Voyez le code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <unistd.h> #include <stdio.h> #define PRINT(msg) do {printf("%s", msg); usleep(200*1000);} while(0); class Foo { public: Foo(void) { PRINT("Foo 1 pre\n"); Foo(1); PRINT("Foo 1 post\n"); } Foo(int i) { PRINT("Foo 2\n"); } }; class Bar { public: typedef enum _ { EA, EB, } myenum; Bar(void) { PRINT("Bar 1 pre\n"); Bar(EA); PRINT("Bar 1 post\n"); } Bar(myenum i) { PRINT("Bar 2\n"); } }; int main(void) { Foo f; Bar b; return 0; } |
1 2 3 4 5 6 7 8 9 | $ ./a.out Foo 1 pre Foo 2 Foo 1 post Bar 1 pre Bar 1 pre Bar 1 pre Bar 1 pre ... |
Une explication ?
Merci d’avance pour vos réponses.
-
hum, je devrait peut-être utiliser un seul constructeur et mettre une valeur par défault directement dans le prototype … ↩
+0
-0