Heim > Artikel > Backend-Entwicklung > Warum können nicht konstante Referenzen in C nicht an nicht verwandte L-Werte oder Temporäre gebunden werden?
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!