std::string str(0);



  • kann mir jemand sagen, warum das hier ohne Warnung compiliert

    std::string str(0);

    (aber zum sofortigen Programmabsturz führt), und das

    std::string str(1);

    vernünftigerweise ein Compilerfehler ist???



  • srry 😃



  • Äh ja, denke schon:

    1 ist ein integer, es gibt keinen Konstruktor von string der ein int nimmt. Außerdem besitzt int keine implizite Konvertierung in irgendwas woraus man nen string bauen kann. Also: Compilerfehler.

    0 hingegen ist (leider) nicht nur ein integer, sondern auch ein (void-)Pointer ins nichts. Dadraus kann man auch nen char* machen und aus dem läßt sich prima ein string konstruieren. Leider zeigt er nirgendwohin und wenn std::string versucht den übergebenen string zu kopieren geht's schief.

    Sowas ist wohl der Grund dafür, warum für C++0x ein neues Schlüsselwort, nämlich nullptr vorgeschlagen wurde.

    MfG Jester



  • Aber es gibt doch keinen String-Ctor der void* nimmt, oder? nur einen der char* nimmt. Macht das einen impliziten cast



  • jede art von pointer kann 0 sein
    auch char*



  • Sorry, was ich oben geschrieben hab war nicht ganz richtig. 0 kann nicht nur ein void* werden, sondern kann in den null-pointer für einen beliebigen Pointer-Typ konvertiert werden. Hier wird's eben ein char*

    MfG Jester



  • jo, da habt Ihr wohl recht

    Danke!


Log in to reply