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>
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:
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!