Kurioses Beispiel von Visual Studio für die Bindung nicht konstanter Referenzen an temporäre Objekte
Das Verhalten von Visual Studio gegenüber der Bindung nicht konstanter Referenzen an temporäre Objekte hat zugenommen Aufgrund seiner scheinbar widersprüchlichen Natur sorgt es bei manchen Programmierern für Stirnrunzeln. Um den Kontext zu verstehen, betrachten Sie den folgenden Codeausschnitt:
class Zebra {int x;}; Zebra goo() {Zebra z; return z;} void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
Überraschenderweise lässt Visual Studio zu, dass dieser Code kompiliert wird, während gcc ihn als Fehler identifiziert. Dieses Phänomen hat viele dazu gebracht, sich über die Gründe für den Ansatz von Visual Studio zu wundern.
Bei näherer Betrachtung stellt sich heraus, dass Visual Studio eine ältere Spracherweiterung verwendet. Ein Microsoft-Fehlerbericht beleuchtet dieses Problem und hebt hervor, dass Visual Studio das Binden temporärer Objekte an nicht konstante Referenzen zulässt. Dieses Verhalten kann jedoch durch die Verwendung der Compileroption /Za korrigiert werden, die Spracherweiterungen deaktiviert.
Um diese Erweiterung weiter zu veranschaulichen, betrachten Sie den folgenden Code:
struct A {}; A f1(); void f2(A&); int main() { f2(f1()); // This line triggers an error with `/Za` enabled }
Als Workaround Visual Studio unterstützt für solche Fälle eine Warnung der Stufe 4, die durch Angabe von /W4 während der Kompilierung aktiviert werden kann. Es ist jedoch erwähnenswert, dass dieser Ansatz weiterhin die Kompilierung des Codes ermöglicht, was die Flexibilität der Visual Studio-Erweiterung unterstreicht.
Das obige ist der detaillierte Inhalt vonWarum erlaubt Visual Studio die nicht konstante Referenzbindung an Temporäre?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!