Heim >Backend-Entwicklung >C++ >Warum erlaubt Visual Studio die nicht konstante Referenzbindung an Temporäre?

Warum erlaubt Visual Studio die nicht konstante Referenzbindung an Temporäre?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-24 09:55:25904Durchsuche

Why Does Visual Studio Allow Non-Const Reference Binding to Temporaries?

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!

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