Heim >Backend-Entwicklung >C++ >Warum kann ich R-Werte per Const-Referenz in C übergeben?

Warum kann ich R-Werte per Const-Referenz in C übergeben?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 09:32:30385Durchsuche

 Why Can I Pass Rvalues by Const Reference in C  ?

R-Werte mit Const-Referenzen bewahren: Ein C-Rätsel

In C ist die Übergabe von R-Werten (temporären Objekten) per Const-Referenz erlaubt, im Gegensatz zu normalen Referenzen . Betrachten Sie das folgende Programm:

<code class="cpp">void display(const int& a) { cout << a; }

int main() {
  int a = 5;
  display(a);      // Works with an lvalue
  display(5);      // Also works with an rvalue
  return 0;
}</code>

Das Programm ermöglicht die Übergabe sowohl von l-Werten als auch von r-Werten an die Anzeigefunktion, auch wenn die Referenz als const markiert ist. Dieses Verhalten ist rätselhaft, da Const-Referenzen typischerweise mit der Erhaltung von L-Werten verbunden sind.

Die Const Reference Lifetime Extension

Der Schlüssel zum Verständnis dieses Verhaltens liegt in der Semantik von const-Referenzen in C . Eine konstante Referenz verlängert die Lebensdauer des referenzierten Objekts bis zum Ende des enthaltenden Bereichs. Im Falle eines R-Werts verhindert dies effektiv die Zerstörung des temporären Objekts, bis die Konstantenreferenz den Gültigkeitsbereich verlässt.

Beispiel: Verlängerung der R-Wert-Lebensdauer

In unserem Beispielsweise geschieht Folgendes, wenn display(5) aufgerufen wird:

  • Ein R-Wert vom Typ int wird mit dem Wert 5 erstellt.
  • Eine konstante Referenz a ist an diesen R-Wert gebunden.
  • Die const-Referenz verlängert die Lebensdauer des R-Werts bis zum Ende der Anzeigefunktion.
  • Der R-Wert wird innerhalb der Funktion verwendet, um den Wert 5 auszugeben.
  • Wenn der Die Anzeigefunktion kehrt zurück, die konstante Referenz verlässt den Gültigkeitsbereich und der r-Wert wird schließlich zerstört.

Dies zeigt, wie eine konstante Referenz weiterhin auf einen r-Wert verweisen kann, sodass dieser bestehen bleibt, obwohl er vorhanden ist würde sonst sofort vernichtet werden.

Das obige ist der detaillierte Inhalt vonWarum kann ich R-Werte per Const-Referenz in C übergeben?. 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