|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 673 ![]() |
Bonjour,
je vous propose une petite question piège. Prenons le code suivant: Code :
Approfondissement de la question: pourquoi? |
||
|
|
00
|
|
|
#2 |
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 554 ![]() |
Selon moi:
bool bool string bool bool Tout simplement parce que "" est une chaîne vide, doit un const char* qui sera transtypé en bool avant std::string Pour forcer le transtypage en string, il faut l'expliciter avec f(std::string("")); |
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 673 ![]() |
héhé, tu as évité un piège, mais tu es tombé dans le second ;p
essaie de compiler... d'ailleurs, si quelqu'un a une version récente de gcc et pouvais tester, ça pourrait être intéressant (je n'ai pas de gcc sous la main). |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 318 ![]() |
J'aurais dit comme Bousk... et gcc confirme :
Citation:
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
|
|
00
|
|
|
#5 |
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 554 ![]() |
J'ai compilé (moyennant l'ajout des includes etc) sur visual 2010, et j'obtiens exactement ça
Quel résultat as-tu ? Lequel attends-tu ? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 673 ![]() |
ooops oui, vous avez raison, my bad
oui oui, j'obtiens bien la même chose avec ms vc. J'ai confondu sur le premier appel: f( "test" ); j'ai cru que tu disais que ça appelais la version f(const std::string &); Vous avez donc bien répondu tous les deux, sorry |
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() ![]() Inscription : décembre 2008 Messages : 490 ![]() |
Il est quand même étrange que les appels 1 et 5 n'émettent pas une erreur "appel ambigu" à la compilation... puisque c'est manifestement le cas, non ?
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 318 ![]() |
Une petite source, pour les explications : http://en.cppreference.com/w/cpp/language/implicit_cast
Ce qui se passe, c'est que le compilateur à le choix entre une conversion du pointeur en bool (voir la partie "Boolean conversions") ou appeler un constructeur de conversion. La règle de résolution des noms (indiqué en haut de page) indique qu'une conversion implicite standard est préférée à la conversion par appel d'une fonction définie par l'utilisateur EDIT : @cob59, sur MSVC, c'est l'erreur C4800 (mais je sais pas comment on l'active ou si elle est activée par défaut)
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
|
10
|
Copyright © 2000-2013 - www.developpez.com