Heim  >  Artikel  >  Backend-Entwicklung  >  Warum können nicht konstante Referenzen in C nicht an nicht verwandte L-Werte oder Temporäre gebunden werden?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-25 22:17:11398Durchsuche

Why Can't Non-Const References Bind to Unrelated Lvalues or Temporaries in C  ?

Nicht-konstante Referenzbindungsbeschränkungen

In C können konstante Referenzen sowohl an L-Werte desselben Typs als auch an nicht verwandte Typen gebunden werden. Nicht-konstante Referenzen unterliegen jedoch zusätzlichen Einschränkungen, wenn sie an L-Werte gebunden werden.

Fehler bei der nicht verwandten L-Wert-Bindung

Beachten Sie den folgenden Code:

int a;
double &m = a; // error: non-const lvalue reference to type 'double' cannot bind to a value of unrelated type 'int'

Hier wird versucht, die nicht konstante Referenz m an einen L-Wert vom Typ int zu binden. Dies schlägt fehl, weil nicht konstante Referenzen nicht an nicht verwandte L-Werte gebunden werden können.

Temporäre Objektbindungsverbot

Nicht konstante Referenzen können auch nicht an temporäre Objekte gebunden werden. Zum Beispiel:

double &m = a; // compilation error: temporary bound to non-const reference

In diesem Fall umfasst die Zuweisung von a zu m die Konvertierung eines int in ein double und die Erstellung eines temporären Objekts. Nicht konstante Referenzen können nicht an solche temporären Objekte gebunden werden.

Der Grund für diese Einschränkung ist, dass nicht konstante Referenzen Zugriff auf die Adresse des ursprünglichen Objekts erfordern, was für temporäre Objekte nicht möglich ist, da sie unmittelbar nach der Verwendung zerstört werden .

Visual Studio Compiler Extension

Es ist wichtig zu beachten, dass dieser Fehler in Visual Studio auftreten kann tritt aufgrund einer Compilererweiterung, die in bestimmten Fällen die Bindung an temporäre Objekte ermöglicht, nicht auf. Andere Compiler wie GCC werden die unverbindliche Regel jedoch strikt durchsetzen.

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