Heim > Backend-Entwicklung > C++ > Hauptteil

Warum verlängert das Binden eines temporären Objekts an eine konstante Referenz seine Lebensdauer in C?

DDD
Freigeben: 2024-11-02 17:03:02
Original
692 Leute haben es durchsucht

Why Does Binding a Temporary Object to a Constant Reference Extend its Lifetime in C  ?

Temporäre Objekte zurückgeben und an konstante Referenzen binden

In C ist das Zuweisen eines temporären Objekts zu einer konstanten Referenz eine häufige Operation, die zunächst Fragen zur Lebensdauer von aufwerfen kann das Temporäre.

Frage:

Warum ist der folgende Code gültig und führt nicht zu einem Compilerfehler?

<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

Antwort:

C definiert explizit, dass das Binden eines temporären Objekts an eine konstante, stapelbasierte Referenz die Lebensdauer des temporären Objekts verlängert, damit sie mit der der Referenz übereinstimmt. In diesem Szenario bleibt das von foo() zurückgegebene temporäre Objekt bis zum Ende der Funktion main() bestehen.

Erklärung:

  • Temporäre Objekte haben normalerweise eine kurze Lebensdauer, endet am Ende des Ausdrucks, in dem sie erscheinen.
  • Allerdings lässt C eine Ausnahme für Konstantenreferenzen auf dem Stapel zu.
  • Durch Binden eines Temporären an eine Konstantenreferenz auf dem Stapel , wird die Lebensdauer des Temporärs verlängert, um der Lebensdauer der Referenz zu entsprechen.
  • Dies verhindert Dangling-Reference-Fehler, die durch Referenzen verursacht werden, die auf zerstörte Objekte verweisen.

Hinweis:

  • Diese Ausnahme gilt nur für stapelbasierte Konstantenreferenzen.
  • Sie gilt nicht für Referenzen, die Mitglieder von Objekten sind.
  • Für Weitere Einzelheiten finden Sie in Herb Sutters „GotW #88: A Candidate For the „Most Important const“.“

Das obige ist der detaillierte Inhalt vonWarum verlängert das Binden eines temporären Objekts an eine konstante Referenz seine Lebensdauer in C?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage