Warum wirft C++ das String-Literal, das ich als Bool anstelle von String übergebe?Overloaded Bool/String Mehrdeutigkeit
#include <iostream>
using namespace std;
class A
{
public:
A(string v)
{
cout << v;
}
A(bool v)
{
cout << v;
}
};
int main()
{
A("hello");
return 0;
}
Ausgang: 1
Ist es, weil der Compiler nicht intelligent genug, um den Sprung von char * string zu machen und eher davon ausgegangen, dass nur Bool die nächste Sache zu einem Zeiger ist? Ist meine einzige Option, einen expliziten char * -Konstruktor zu erstellen, der genau dasselbe wie der Zeichenkettenkonstruktor tut?
Ich bevorzuge in der Regel explizite Konvertierungen. Implizite Conversions haben so etwas. Siehe http://stackoverflow.com/q/2346083/10077 –
Ich bin mir nicht sicher, aber: Beide Konvertierungen sind möglich (Konvertieren von Zeiger auf bool überprüft Nullzeiger). Das Konvertieren in bool ist jedoch eine * eingebaute * Konvertierung, während zu string eine * benutzerdefinierte * convsion (über implizite c'tor) ist. Und jetzt, wenn ich mich richtig erinnere, haben Built-Ins mehr Priorität als benutzerdefinierte. – leemes
möglich Duplikat von [C++ Methode Überladung funktioniert nicht] (http://StackOverflow.com/Questions/14770252/c-method-overload-not-working) –