Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verlängern Const-Referenzen auf dem Stack die Lebensdauer temporärer Objekte in C?

Wie verlängern Const-Referenzen auf dem Stack die Lebensdauer temporärer Objekte in C?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 19:11:02980Durchsuche

How Do Const References on the Stack Extend the Lifetime of Temporary Objects in C  ?

Temporäre Objekte an Const-Referenzen binden

In C verlängert das Binden eines temporären Objekts an eine Referenz auf const auf dem Stapel dessen Lebensdauer der Referenz selbst. Diese Ausnahme von der Regel, dass temporäre Objekte normalerweise am Ende des umschließenden Ausdrucks ablaufen, ermöglicht mehr Flexibilität und Sicherheit im Umgang mit temporären Objekten.

Beachten Sie den folgenden Code:

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

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

Hier , wird von der Funktion foo() ein temporäres String-Objekt zurückgegeben. Typischerweise verschwindet dieses temporäre Element am Ende des vollständigen Ausdrucks, an dem foo() beteiligt ist. Durch die Bindung an den konstanten Referenzwert wird jedoch die Lebensdauer der temporären Zeichenfolge bis zur schließenden geschweiften Klammer verlängert.

Diese Abweichung von den üblichen Regeln für die temporäre Lebensdauer ermöglicht sichereren Code, der baumelnde Referenzen vermeidet. Im obigen Beispiel ist die Existenz der an val gebundenen temporären Zeichenfolge garantiert, solange val existiert.

Beachten Sie, dass diese Eigenschaft nur für Verweise auf const auf dem Stapel gilt. Die Lebensdauer temporärer Objekte, auf die durch Mitgliedsvariablen von Objekten verwiesen wird, wird dadurch nicht verlängert.

Weitere Informationen finden Sie in Herb Sutters GotW #88: A Candidate For the „Most Important const“, das hier verfügbar ist: https://www.gotw.ca/publications/mill19.htm.

Das obige ist der detaillierte Inhalt vonWie verlängern Const-Referenzen auf dem Stack die Lebensdauer temporärer Objekte in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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