Heim > Backend-Entwicklung > C++ > Hauptteil

Warum erlaubt Visual Studio 2010 das Binden nicht konstanter Referenzen an R-Werte?

Barbara Streisand
Freigeben: 2024-10-28 10:05:29
Original
150 Leute haben es durchsucht

Why Does Visual Studio 2010 Allow Binding Non-Const References to Rvalues?

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!