Perché C++ esegue il casting della stringa letterale passo come bool anziché come stringa?Overloaded Bool/String Ambiguity
#include <iostream>
using namespace std;
class A
{
public:
A(string v)
{
cout << v;
}
A(bool v)
{
cout << v;
}
};
int main()
{
A("hello");
return 0;
}
uscita: 1
Forse perché il compilatore non è abbastanza intelligente per fare il salto da char * a corda e piuttosto appena presuppone che bool è la cosa più vicina a un puntatore? La mia unica opzione è quella di creare un costruttore di char esplicito che fondamentalmente fa esattamente la stessa cosa del costruttore di stringhe?
Generalmente preferisco le conversioni esplicite. Le conversioni implicite hanno trucchi come questo. Vedi http://stackoverflow.com/q/2346083/10077 –
Non sono sicuro ma: Entrambe le conversioni sono possibili (convertendo il puntatore in bool controlla il puntatore nullo). Ma la conversione in bool è una conversione * built-in *, mentre per string è una convinzione * definita dall'utente * (via implicito). E ora, se ricordo bene, i built-in hanno più priorità su quelli definiti dall'utente. – leemes
possibile duplicato di [Sovraccarico metodo C++ non funzionante] (http://stackoverflow.com/questions/14770252/c-method-overload-not-working) –