Heim >Backend-Entwicklung >C++ >Warum ist der „c_str()'-Zeiger eines temporären String-Objekts in „bar()' gültig, nachdem seine erstellende Funktion „foo()' zurückgegeben wurde?
Die Lebensdauer von Objekten in foo() und bar()
In C werden Objekte, die während Funktionsaufrufen erstellt werden, als temporäre Objekte betrachtet. Das Verständnis ihrer Lebensdauer ist entscheidend, um das korrekte Programmverhalten sicherzustellen.
Bedenken Sie den folgenden Code:
std::string foo() { std::string out = something...; return out; } void bar( const char* ccp ) { // do something with the string.. } bar( foo().c_str() );
Frage:
Warum ist c_str( ) Zeiger des von foo() zurückgegebenen temporären Objekts, das in der bar()-Funktion auch nach foo() gültig ist abgeschlossen?
Antwort:
Gemäß dem C-Standard wird ein temporäres Objekt zerstört, sobald der vollständige Ausdruck, der seine Erstellung enthält, abgeschlossen ist. In diesem Fall lautet der vollständige Ausdruck:
bar( foo().c_str() );
In ASCII-Grafik sieht die Lebensdauer des temporären Objekts wie folgt aus:
____________________ full-expression ranges from 'b' to last ')' bar( foo().c_str() ); ^^^^^ ^ | | birth funeral
Das temporäre Objekt wird erstellt, wenn foo() wird aufgerufen (Geburt) und zerstört, nachdem die Ausführung des Ausdrucks abgeschlossen ist (Beerdigung), um sicherzustellen, dass der c_str()-Zeiger während der gesamten Ausführung von bar() gültig bleibt.
Das obige ist der detaillierte Inhalt vonWarum ist der „c_str()'-Zeiger eines temporären String-Objekts in „bar()' gültig, nachdem seine erstellende Funktion „foo()' zurückgegeben wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!