Heim >Backend-Entwicklung >C++ >Ist es sicher, std::string::c_str() für temporäre Zeichenfolgen in C zu verwenden?
Ist es sicher, std::string::c_str() für temporäre Zeichenfolgen zu verwenden?
In C ist die Verwendung von std: :string::c_str() für temporäre Zeichenfolgen gab Anlass zur Sorge. Betrachten Sie den folgenden Codeausschnitt:
void consumer(char const* p) { std::printf("%s", p); } std::string random_string_generator(); consumer(random_string_generator().c_str());
Die Sorge entsteht, weil beim Aufruf von std::string::c_str() für das temporäre std::string-Objekt die Zerstörung des String-Objekts unmittelbar bevorzustehen scheint.
Gemäß dem C 11-Standard referenziert der über std::string::c_str() abgerufene Zeiger jedoch auf den vom String-Objekt verwalteten Speicher und seine Gültigkeit erstreckt sich bis:
Im bereitgestellten Codeausschnitt wird das temporäre Zeichenfolgenobjekt am Ende von zerstört der vollständige Ausdruck (d. h. nach dem Aufruf von Consumer()). Daher gilt der Code als sicher, da der über std::string::c_str() abgerufene Zeiger während des gesamten Aufrufs von Consumer() gültig bleibt.
Die Lebensdauer temporärer Objekte ist seit C 98 klar definiert , anders als in früheren Versionen von C, wo es je nach Compiler unterschiedlich war. Dadurch gilt Code, der in früheren Versionen einst unsicher war, jetzt mit modernen C-Compilern als sicher.
Das obige ist der detaillierte Inhalt vonIst es sicher, std::string::c_str() für temporäre Zeichenfolgen in C zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!