Heim >Backend-Entwicklung >C++ >Warum kann ich R-Werte per Const-Referenz in C übergeben?
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:
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!