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?

Warum lässt Visual Studio zu, dass nicht konstante Referenzen an temporäre Objekte gebunden werden, während GCC dies nicht zulässt?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-22 19:58:10848Durchsuche

Why Does Visual Studio Allow Non-Const References to Bind to Temporary Objects While GCC Doesn't?

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!

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