Bewahren von R-Werten mit Const-Referenzen: Ein C-Rätsel
In C ist die Übergabe von R-Werten (temporären Objekten) per Const-Referenz zulässig, im Gegensatz zu normalen Referenzen . Betrachten Sie das folgende Programm:
void display(const int& a) { cout Das Programm ermöglicht die Übergabe von L- und R-Werten an die Anzeigefunktion, auch wenn die Referenz als const markiert ist. Dieses Verhalten ist rätselhaft, da Konstantenreferenzen normalerweise mit der Beibehaltung von L-Werten verbunden sind.
Die Lebensdauerverlängerung von Const-Referenzen
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 Folgendes geschieht beispielsweise, wenn display(5) aufgerufen wird:
- Ein R-Wert vom Typ int wird mit dem Wert erstellt 5.
- Eine konstante Referenz a ist an diesen R-Wert gebunden.
- Die konstante Referenz verlängert die Lebensdauer des R-Werts bis zum Ende der Anzeigefunktion.
- Der R-Wert ist Wird innerhalb der Funktion zum Drucken des Werts verwendet. 5.
- Wenn die Anzeigefunktion zurückkehrt, verlässt die Konstantenreferenz den Gültigkeitsbereich und der R-Wert wird schließlich zerstört.
Dies zeigt, wie eine Konstantenreferenz weiterhin auf einen R-Wert verweisen kann, sodass dieser bestehen bleibt, auch wenn er andernfalls sofort zerstört würde.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3