Verlängerung der Rvalue-Lebensdauer durch Const-Referenzen
In C dienen Const-Referenzen nicht nur als unveränderliche Aliase, sondern verlängern auch die Lebensdauer von Temporären. Warum hat das C-Komitee beschlossen, dieses Verhalten zu implementieren?
Ein Grund für diese Funktion besteht darin, Implementierungsdetails vor Klassen und Funktionen zu verbergen. Stellen Sie sich eine Matrixklasse vor, die Zeilenvektoren oder Spaltenvektoren zurückgeben kann. Um die Leistung zu optimieren, kann sich die Klasse dafür entscheiden, einen Verweis auf einen internen Wert basierend auf ihrer zeilen- oder spaltenorientierten Organisation zurückzugeben. Indem von Clients verlangt wird, Rückgabewerte als konstante Referenzen zu akzeptieren, kann die Klasse nahtlos zwischen Referenzen und Werten wechseln und Clients von Implementierungsdetails abschirmen.
Historisch gesehen entstand die Entscheidung, die Lebensdauer von rvalue zu verlängern, aus dem Wunsch, Inkonsistenzen in der Art und Weise zu beheben Referenzen verwalteten Provisorien im Jahr 1993. Damals gab es RVO (Return Value Optimization) noch nicht. Das Verbot der Bindung von Zeitarbeitskräften an Referenzen hätte die Leistung erheblich beeinträchtigt. Daher entschied sich das Komitee für eine Lösung, die die Bindung ermöglichte und gleichzeitig die Lebensdauer von Provisorien verlängerte, um deren Verfügbarkeit während der Referenzverwendung sicherzustellen.
Diese Begründung ist im Vorschlag N0345.pdf dokumentiert, der 1993 dem C-Normungsausschuss vorgelegt wurde Durch die Verlängerung der Lebensdauer von R-Werten ermöglichen Konstantenverweise eine bessere Abstraktion, erhalten die Codeflexibilität und optimieren die Leistung bei der Rückgabe von Objekten aus Funktionen.
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