Der fragliche Codeausschnitt beinhaltet die Rückgabe eines temporären std::string-Objekts aus der foo()-Funktion und den anschließenden Aufruf von bar( ) mit dem c_str()-Zeiger des temporären Elements. Die Sorge rührt von der Annahme her, dass die temporäre Datei zerstört wird, bevor bar() ausgeführt wird.
Diese Annahme ist jedoch falsch. Gemäß dem C-Sprachstandard existiert ein temporäres Objekt, bis der vollständige Ausdruck, an dem es beteiligt ist, vollständig ist. Dieses Konzept wird in der folgenden Codestruktur veranschaulicht:
____________________ range of full expression bar( foo().c_str() ); ^^^^^ ^ | | birth funeral
In diesem Beispiel erstreckt sich die Lebensdauer des von foo() zurückgegebenen Temporärs von seiner Erstellung am mit „Geburt“ gekennzeichneten Punkt bis zu seiner Zerstörung bei „Beerdigung“. ." Diese Zerstörung erfolgt nach dem Aufruf von bar(), nicht vorher, wie ursprünglich angenommen.
Die genaue Regel besagt, dass ein temporäres Objekt zerstört wird, wenn der vollständige Ausdruck, der den R-Wert lexikalisch enthält (Ausdruck auf der rechten Seite), Der Verantwortliche für die Erstellung schließt die Auswertung ab. Im angegebenen Code ist dieser vollständige Ausdruck der Funktionsaufruf selbst, bar( foo().c_str() ). Daher bleibt das temporäre Objekt bestehen, bis dieser Aufruf abgeschlossen ist, wodurch sichergestellt wird, dass bar() auf seinen c_str()-Zeiger zugreifen kann.
Das obige ist der detaillierte Inhalt vonWie lange leben temporäre C-Saiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!