Wie wäre es, wenn meine C++ Code (siehe unten) eine Zeichenfolge als eine leere Zeichenfolge initialisiert hat:Initialisierung Zeichenfolge als null gegen leere Zeichenfolge
std::string myStr = "";
....some code to optionally populate 'myStr'...
if (myStr != "") {
// do something
}
vs. no/null Initialisierung:
std::string myStr;
....some code to optionally populate 'myStr'...
if (myStr != NULL) {
// do something
}
Gibt es irgendwelche Best Practices oder Fehler?
'NULL' (konzeptionell) ist ein Zeiger und sollte nur als solcher verwendet werden. Ein 'std :: string' ist kein Zeiger, daher sollte er nicht kombiniert werden. PS. Die Initialisierungen sind die gleichen: der ctor von 'std :: string' setzt ihn auf die leere Zeichenkette. – MSalters
@MSalters Hallo, ich stimme deinem Punkt zu, aber wenn der Typ inkompatibel zu sein scheint, wirft der Compiler keinen Fehler. Ich habe VS 2010 und es initialisiert die std :: string automatisch mit NULL. –
@Surfing_SO: Es gibt einen Zeichenkettenkonstruktor, der einen Zeiger auf ein Array von Zeichen nimmt, das durch ein Nullzeichen beendet wird. Sie haben einen solchen Zeiger nicht korrekt übergeben (NULL zeigt nicht auf ein Array von Zeichen oder irgendetwas anderes). Dies ist Undefined Behavior und alles kann in diesem Fall passieren. – MSalters