Heim > Backend-Entwicklung > C++ > Wie lange leben temporäre C-Saiten?

Wie lange leben temporäre C-Saiten?

Barbara Streisand
Freigeben: 2024-12-10 18:30:11
Original
829 Leute haben es durchsucht

How Long Do Temporary C   Strings Live?

Lebensdauer von Provisorien: Die Feinheiten enträtseln

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage