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!