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!