Heim >Backend-Entwicklung >C++ >Warum kompiliert Visual Studio nicht konstante Verweise auf Temporäre, während andere Compiler dies nicht tun?

Warum kompiliert Visual Studio nicht konstante Verweise auf Temporäre, während andere Compiler dies nicht tun?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 20:24:13181Durchsuche

Why Does Visual Studio Compile Non-Constant References to Temporaries While Other Compilers Don't?

Nichtkonstante Referenz an Temporär gebunden: Visual Studio-Anomalie

Dieses Problem tritt beim Kompilieren von Code auf, der versucht, eine nichtkonstante Referenz zu binden zu einem temporären Objekt. Während Visual Studio die Kompilierung eines solchen Codes zulässt, identifizieren ihn andere Compiler wie gcc als Kompilierungsfehler.

Erklärung

Im bereitgestellten Beispiel:

class Zebra {int x;};
Zebra goo() {Zebra z; return z;}
void foo(Zebra &x)
{
    Zebra y;
    x = y;
    foo(goo());
}

Der Code versucht, eine nicht konstante Referenz (Zebra &x) an ein temporäres Objekt zu binden, das von der Funktion goo() zurückgegeben wird. Laut C-Standard sollte dies zu einem Kompilierungsfehler führen.

Visual Studio-Erweiterung

Visual Studio verfügt jedoch über eine alte Erweiterung, die dieses Verhalten ermöglicht. Diese Erweiterung behandelt Verweise auf temporäre Objekte im Wesentlichen so, als wären sie Verweise auf nicht temporäre Objekte.

Diese Erweiterung wurde eingeführt, um ältere Codebasen zu unterstützen. Dies kann jedoch zu unerwartetem Verhalten führen und wird im Allgemeinen nicht empfohlen.

Empfohlener Ansatz

Um diese Anomalien zu vermeiden, deaktivieren Sie die Erweiterung am besten mit /Za Compiler-Flag. Dadurch wird sichergestellt, dass der Code dem C-Standard entspricht und von verschiedenen Compilern konsistent behandelt wird.

Das obige ist der detaillierte Inhalt vonWarum kompiliert Visual Studio nicht konstante Verweise auf Temporäre, während andere Compiler dies nicht tun?. 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