Heim > Backend-Entwicklung > C++ > Wie stellen konstante Referenzen die Lebensdauer temporärer Objekte in C sicher?

Wie stellen konstante Referenzen die Lebensdauer temporärer Objekte in C sicher?

Susan Sarandon
Freigeben: 2024-10-26 13:58:30
Original
270 Leute haben es durchsucht

How do const references ensure the lifetime of temporary objects in C  ?

Temporäre Objekte an Const-Referenzen zurückgeben

In C verlängert eine Referenz, die an ein temporäres Objekt auf dem Stapel gebunden ist, die Lebensdauer des temporären Objekts für die Dauer der Referenz selbst. Dies verhindert baumelnde Referenzfehler.

Betrachten Sie das folgende Beispiel:

<code class="cpp">string foo() {
  return string("123");
}

int main() {
  const string& val = foo();
  printf("%s\n", val.c_str());
  return 0;
}</code>
Nach dem Login kopieren

In diesem Code ist die von foo() zurückgegebene Zeichenfolge ein temporäres Objekt. Wenn es jedoch an den const-Referenzwert gebunden ist, wird die Lebensdauer des Temporärs bis zum Ende der Funktion main() verlängert. Dadurch kann val sicher auf den Inhalt der temporären Zeichenfolge zugreifen.

Der C-Standard erlaubt dieses Verhalten ausdrücklich, um häufige Dangling-Reference-Fehler zu vermeiden. Ohne sie würde die temporäre Zeichenfolge im obigen Beispiel am Ende der Funktion foo() zerstört werden, was dazu führen würde, dass val auf einen ungültigen Speicherort verweist.

Wichtiger Hinweis:

Diese Funktion gilt nur für stapelbasierte Referenzen. Die Lebensdauer temporärer Objekte, die Mitglieder von Objekten sind oder an anderen dynamischen Speicherorten gespeichert sind, wird dadurch nicht verlängert.

Das obige ist der detaillierte Inhalt vonWie stellen konstante Referenzen die Lebensdauer temporärer Objekte in C sicher?. 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