Heim > Backend-Entwicklung > C++ > Warum können nicht konstante L-Wert-Referenzen in C nicht an Temporäre gebunden werden?

Warum können nicht konstante L-Wert-Referenzen in C nicht an Temporäre gebunden werden?

Patricia Arquette
Freigeben: 2024-12-06 14:20:13
Original
1015 Leute haben es durchsucht

Why Can't Non-Const Lvalue References Bind to Temporaries in C  ?

Nicht-konstante L-Wert-Referenzen und temporäre Bindungen

In C wird erwartet, dass nicht-konstante L-Wert-Referenzen an L-Werte desselben oder binden abgeleiteter Typ. Bestimmte Situationen, wie z. B. die Bindung an temporäre Objekte, können jedoch zu Fehlern führen.

Warum ist der folgende Code gültig?

int a;
const double &m = a;
Nach dem Login kopieren

In diesem Fall wird eine Referenz an einen L-Wert gebunden , und da die Referenz const ist, kann der L-Wert nicht geändert werden. Dies ist in C zulässig, solange die Typen kompatibel sind.

Beim Versuch, eine nicht konstante L-Wert-Referenz an einen L-Wert eines anderen Typs zu binden, tritt jedoch ein Fehler auf:

int a;
double &m = a;
Nach dem Login kopieren

Fehler: Nicht-konstante L-Wert-Referenz auf den Typ „double“ kann nicht an einen Wert des nicht verwandten Typs „int“ gebunden werden

Dieser Fehler wird ausgelöst, weil ein temporärer Wert vorliegt beteiligt. Durch die implizite Typkonvertierung von int nach double wird ein temporäres Objekt erstellt. Nicht konstante Referenzen können nicht an temporäre Objekte gebunden werden, da sie erfordern, dass das Objekt eine bekannte Lebensdauer und einen bekannten Speicherort hat. Temporäre Objekte sind naturgemäß für eine begrenzte Dauer vorhanden.

Visual Studio kann diesen Code aufgrund einer Compilererweiterung, die in bestimmten Fällen die Bindung an temporäre Objekte ermöglicht, möglicherweise fehlerfrei kompilieren. Compiler wie GCC kennzeichnen diesen Fehler jedoch korrekt.

Das folgende Beispiel zeigt ein ähnliches Problem mit benutzerdefinierten Typen:

struct Foo {};

Foo &obj = Foo(); // error: binding non-const reference to temporary
Nach dem Login kopieren

Das Verständnis dieses Konzepts ist für die ordnungsgemäße Referenzbehandlung in C von entscheidender Bedeutung und Vermeidung von Laufzeitproblemen im Zusammenhang mit der Objektlebensdauer.

Das obige ist der detaillierte Inhalt vonWarum können nicht konstante L-Wert-Referenzen in C nicht an Temporäre gebunden werden?. 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