 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
v.p. Guest
|
Posted: Mon Jul 19, 2004 1:21 pm Post subject: const char* reconnu comme bool ? |
|
|
Bonjour,
Voici ce qui me titille aujourd hui.
Dans une classe j'ai deux methodes de meme nom :
void fonction(string A, string B)
et
void fonction(string A, bool B)
quand j'appelle
monobjet.fonction("foo", "blah");
il appelle la deuxieme !
alors qu'avec
monobjet.fonction("foo", string("blah"));
il appelle la premiere.
Qu'il faille specifier string("blah") pour obtenir un objet string
d'accord, puisque "unechaine" est en fait un const char* si je ne
m'abuse.
Mais alors pourquoi appelle t-il la premiere fonction sans broncher ?
Un const char* peut etre assimile a un bool ?
Ca me parait etrange tout de meme. Et a vous ?
Merci de combler mon ignorance.
Vincent
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Mon Jul 19, 2004 2:04 pm Post subject: Re: const char* reconnu comme bool ? |
|
|
"v.p." wrote:
| Quote: | Dans une classe j'ai deux methodes de meme nom :
void fonction(string A, string B)
et
void fonction(string A, bool B)
quand j'appelle
monobjet.fonction("foo", "blah");
il appelle la deuxieme !
alors qu'avec
monobjet.fonction("foo", string("blah"));
il appelle la premiere.
Qu'il faille specifier string("blah") pour obtenir un objet string
d'accord, puisque "unechaine" est en fait un const char* si je ne
m'abuse.
Mais alors pourquoi appelle t-il la premiere fonction sans broncher ?
Un const char* peut etre assimile a un bool ?
|
Oui, les pointeurs peuvent être implicitement convertis vers 'bool',
un pointeur null étant converti en 'false' et un autre pointeur
valide en 'true' - tout cela pour maintenir la compatibilité avec
le C, voir le C++ pré-standard, où on écrivait souvent
"if(p)" ou while(!p) à la place de "if(p != 0)" ou "while(p == 0)".
Lors de la résolution de la surcharge, cette conversion "standard"
est considérée comme meilleure que la conversion "définie par
l'utilisateur" à l'aide du constructeur std::string(char const*)
(cf. § 13.3.3.2/2 du Standard)
La solution serait d'ajouter quelque chose comme
void fonction(string A, char const* B) { fonction(A, std::string(B)); }
das ta classe.
Falk
|
|
| Back to top |
|
 |
v.p. Guest
|
Posted: Mon Jul 19, 2004 2:07 pm Post subject: Re: const char* reconnu comme bool ? |
|
|
Rebonjour,
| Quote: | ? Un const char* peut etre assimile a un bool ?
Oui, les pointeurs peuvent être implicitement convertis vers 'bool',
un pointeur null étant converti en 'false' et un autre pointeur
valide en 'true' - tout cela pour maintenir la compatibilité avec
le C, voir le C++ pré-standard, où on écrivait souvent
"if(p)" ou while(!p) à la place de "if(p != 0)" ou "while(p == 0)".
Lors de la résolution de la surcharge, cette conversion "standard"
est considérée comme meilleure que la conversion "définie par
l'utilisateur" à l'aide du constructeur std::string(char const*)
(cf. § 13.3.3.2/2 du Standard)
|
Ok. Merci beaucoup !
| Quote: | La solution serait d'ajouter quelque chose comme
void fonction(string A, char const* B) { fonction(A,
std::string(B)); }
das ta classe.
|
C'est ce que j'ai fait
Encore merci pour cette reponse precise et rapide !
Vincent
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|