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
Freigeben: 2024-12-24 09:55:25
Original
901 Leute haben es durchsucht

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());
}
Nach dem Login kopieren

Ü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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage