Heim >Backend-Entwicklung >C++ >Warum lässt Visual Studio zu, dass nicht konstante Referenzen an temporäre Objekte gebunden werden, während GCC dies nicht zulässt?
Fehler: Nicht-konstante Referenz in Visual Studio an temporär gebunden
GCC löst einen Fehler aus, wenn ein temporäres Objekt einem nicht-konstanten Objekt zugewiesen wird Referenz. Überraschenderweise ermöglicht Visual Studio dies. Warum die Diskrepanz?
Die Erklärung liegt in einer alten Erweiterung in Visual Studio. Wie in einem Fehlerbericht erwähnt: „Temporäre Objekte können an nicht konstante Referenzen gebunden werden“, erlaubt Visual Studio die Bindung temporärer Objekte an nicht konstante Referenzen, auch wenn dies zu undefiniertem Verhalten führen kann.
Dies Verhalten war umstritten. In einer Antwort auf den Fehlerbericht wird darauf hingewiesen, dass es für diesen Fehler eine Warnung der Stufe 4 gibt, die mit dem Compiler-Flag „/W4“ aktiviert werden kann.
Es gibt jedoch eine Möglichkeit, dies in Visual zu einem Fehler zu machen Studio: Spracherweiterungen mit dem Flag „/Za“ deaktivieren. Dies ist eine nützliche Problemumgehung, wenn Sie strenge C-Standards einhalten und potenziell problematisches Codeverhalten vermeiden möchten.
Betrachten Sie zur Veranschaulichung das folgende Beispiel:
class Zebra { int x; }; Zebra goo() { Zebra z; return z; } void foo(Zebra &x) { Zebra y; x = y; foo(goo()); // Error in GCC, allowed in Visual Studio }
In Visual Studio dieser Code wird ohne Fehler kompiliert. In GCC wird jedoch ein Kompilierungsfehler generiert, da das temporäre Objekt einer nicht konstanten Referenz zugewiesen wird.
Das obige ist der detaillierte Inhalt vonWarum lässt Visual Studio zu, dass nicht konstante Referenzen an temporäre Objekte gebunden werden, während GCC dies nicht zulässt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!