Heim > Backend-Entwicklung > C++ > Hauptteil

Warum erlaubt VS2010 die Bindung nicht konstanter Referenzen an R-Werte?

DDD
Freigeben: 2024-10-28 03:22:31
Original
630 Leute haben es durchsucht

Why Does VS2010 Allow Non-Const References to be Bound to Rvalues?

Nicht-konstante Referenzbindung an R-Wert: Eine VS2010-Anomalie

In C wird im Allgemeinen die Bindung einer nicht-konstanten Referenz an einen R-Wert in Betracht gezogen ein Fehler. In Visual Studio 2010 wird der folgende Code jedoch ohne Fehler oder Warnungen kompiliert:

<code class="cpp">string foo() { return "hello"; }
int main() 
{
    //below should be illegal for binding a non-const (lvalue) reference to a rvalue
    string& tem  = foo();   

    //below should be the correct one as only const reference can be bind to rvalue(most important const)
    const string& constTem = foo();   
}</code>
Nach dem Login kopieren

Dieses Verhalten steht im Widerspruch zu anderen Compilern wie GCC und VS2008, die für solchen Code Kompilierungsfehler oder Warnungen auslösen. Diese Diskrepanz hat die Frage aufgeworfen, ob es sich um einen Fehler in VS2010 handelt.

Erklärung

Das Verhalten von VS2010 wird in diesem Fall auf eine bekannte Erweiterung in den VS-Compilern zurückgeführt . In der Vergangenheit haben diese Compiler die Bindung von Nicht-Const-Referenzen an R-Werte ohne explizite Const-Qualifizierung ermöglicht. Dieses Verhalten wurde aus Bequemlichkeit für Programmierer eingeführt und gilt nicht als Standard-C-Funktion.

Im Beispielcode kann das Fehlen jeglicher Fehler oder Warnungen in VS2010 wie folgt erklärt werden:

  • Der Compiler erkennt den Rückgabewert von foo() als R-Wert.
  • Er interpretiert die string& tem-Deklaration als nicht konstante Referenz auf einen String.
  • Aufgrund der Erweiterung in den VS-Compilern ermöglicht es, die Referenz an den von foo() zurückgegebenen R-Wert zu binden.

Fazit

Das Verhalten von VS2010 beim Zulassen Nicht-konstante Referenzen, die ohne Fehler oder Warnungen an R-Werte gebunden werden sollen, sind kein Standard-C und werden als Erweiterung betrachtet. Obwohl dies in manchen Fällen nützlich sein kann, kann es auch zu unerwartetem Verhalten führen und es wird generell davon abgeraten, konstante Referenzen für die Bindung an R-Werte zu verwenden.

Das obige ist der detaillierte Inhalt vonWarum erlaubt VS2010 die Bindung 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage