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 nach std::string konvertiert werden. Wo liegt hier das Problem? Was übersehe ich?

    Danke im Voraus.



  • out schrieb:

    const char[n] kann doch implizit nach std::string konvertiert 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 constructor foo(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::string nicht 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::string nicht mehr in Betracht.

    Aha ok. Das heißt, const char[] ==> foo funktioniert, aber const char[] ==> x ==> y ==> z ==> foo funktioniert nicht. Gut zu wissen. 🙂


Anmelden zum Antworten