Tenir compte de la classe foo
avec deux constructeurs définis comme ceci:Pourquoi existe-t-il une conversion de type implicite des pointeurs vers bool en C++?
class foo
{
public:
foo(const std::string& filename) {std::cout << "ctor 1" << std::endl;}
foo(const bool some_flag = false) {std::cout << "ctor 2" << std::endl;}
};
instancier la classe avec une chaîne littérale, et devinez quel constructeur est appelé?
foo a ("/path/to/file");
Sortie:
cteur 2
Je ne sais pas pour vous, mais je ne trouve pas que le comportement le plus intuitif dans l'histoire de la programmation. Je parie qu'il y a une raison intelligente pour cela, et j'aimerais savoir ce que cela pourrait être?
duplication possible de [Pourquoi le compilateur a-t-il choisi une chaîne de caractères pour le modèle implicite de L ""?] (Http://stackoverflow.com/questions/316181/why-does-the-compiler-choose-bool-over -string-for-implicit-typecast-of-l) – Hasturkun
Encore une autre question similaire: [Fonction/Méthode de surcharge C++: confusion de type de données?] (http://stackoverflow.com/questions/1636181/function-method-overloading- c-data-type-confusion) – Athari
Désolé. J'ai fait une recherche (comme je me suis dit que ce serait une FAQ), mais je n'ai pas trouvé de questions avec un titre qui impliquait que la question était à ce sujet. – Oystein