implicit conversion: const char[n] ==> std::string
-
Hi,
ich stehe gerade auf dem Schlauch. Ich verstehe nicht, wieso folgendes nicht funktioniert:#include <string> using namespace std; class foo { public: foo( const string& str ) {} }; int main() { foo f = "Hallo"; }const char[n]kann doch implizit nachstd::stringkonvertiert werden. Wo liegt hier das Problem? Was übersehe ich?Danke im Voraus.
-
out schrieb:
const char[n]kann doch implizit nachstd::stringkonvertiert werden. Wo liegt hier das Problem? Was übersehe ich?Jupp, das ist eine user-defined conversion. Die Standarbibliothek ist in diesem Zusammenhang auch nur ein "user".
Eine weitere user-defined conversion ist Dein converting constructorfoo(const std::string&);Allerdings lesen wir:
§iso C++ schrieb:
12.3 Conversions [class.conv]
/4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.D.h. nachdem der Compiler Deinen Konstruktor sieht, zieht er die implizite Konvertierung
const char[] -> std::stringnicht mehr in Betracht.
-
Furble Wurble schrieb:
Allerdings lesen wir:
§iso C++ schrieb:
12.3 Conversions [class.conv]
/4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.D.h. nachdem der Compiler Deinen Konstruktor sieht, zieht er die implizite Konvertierung
const char[] -> std::stringnicht mehr in Betracht.Aha ok. Das heißt,
const char[] ==> foofunktioniert, aberconst char[] ==> x ==> y ==> z ==> foofunktioniert nicht. Gut zu wissen.