Visual Studio 2010: Zulassen der Bindung nicht konstanter Verweise auf Rvalue
Problem:
Im folgenden Codeausschnitt wird der Compiler von Visual Studio 2010 (SP1) erfolgreich ohne Fehler oder Warnungen kompiliert, obwohl es sich anscheinend um eine ungültige Initialisierung eines nicht konstanten Verweises auf einen temporären R-Wert handelt:
<code class="cpp">string foo() { return "hello"; } int main() { string& tem = foo(); // Should be illegal }</code>
Erwartetes Verhalten:
Gemäß dem C-Standard sollte das Binden einer nicht konstanten Referenz an einen R-Wert als Fehler oder Warnung betrachtet werden. Dies liegt daran, dass nicht konstante Referenzen nur an L-Werte (Objekte mit einer permanenten Adresse) gebunden werden sollten.
VS2010-Verhalten:
Visual Studio 2010-Compiler haben dies jedoch in der Vergangenheit getan erlaubte diese Praxis als Erweiterung der Sprache. Dieses Verhalten entspricht nicht dem C-Standard und wird allgemein als Fehler angesehen.
Grund:
Der Grund für dieses Verhalten ist nicht ganz klar, aber es ist so Es wird angenommen, dass dies mit der Tatsache zusammenhängt, dass Visual Studio-Compiler in Bezug auf Fehlerprüfungen und Warnungen immer nachsichtiger waren. Diese Laxheit wurde möglicherweise absichtlich eingeführt, um eine größere Flexibilität beim Schreiben von Code zu ermöglichen, obwohl sie nicht dem C-Standard entspricht.
Auswirkungen:
Dieses Verhalten kann Auswirkungen haben für Codesicherheit und Leistung. Das Binden einer nicht konstanten Referenz an einen R-Wert kann zu unerwarteten Ergebnissen führen, da der R-Wert jederzeit geändert oder zerstört werden kann.
Lösung:
Die empfohlene Lösung soll vermeiden, nicht konstante Referenzen an R-Werte zu binden. Verwenden Sie stattdessen entweder eine Konstantenreferenz (die sowohl an L-Werte als auch an R-Werte binden kann) oder einen Zeiger.
Das obige ist der detaillierte Inhalt vonWarum erlaubt Visual Studio 2010 das Binden nicht konstanter Referenzen an R-Werte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!