Heim >Backend-Entwicklung >C++ >Ist „bar' ein L-Wert oder ein R-Wert in „void foo(string&& bar)'?
R-Wert-Referenzen und L-Werte verstehen
Betrachten Sie den folgenden Code:
void foo(string&& bar){ string* temp = &bar; cout << *temp << " @:" << temp << endl; }
Hier stellt sich die Frage: Ist Die Variable bar ist ein R-Wert oder ein lvalue?
Antwort: Bar ist ein Lvalue
Obwohl es den Typ „rvalue reference to string“ hat, ist bar immer noch ein Lvalue, weil es einen Namen hat. Ein L-Wert ist per Definition jeder Ausdruck, der zu einem benannten Speicherort ausgewertet wird.
Unterscheidung von R-Wert-Referenzen von L-Wert-Referenzen
Während Sie ähnliche Operationen für R-Wert und ausführen können Wenn es sich um L-Wert-Referenzen innerhalb von Ausdrücken handelt, unterscheiden sie sich erheblich darin, woran sie gebunden werden können sie:
Bedeutung von R-Wert-Referenzen
Die Unterscheidung zwischen R-Wert- und L-Wert-Referenzen sind von entscheidender Bedeutung, wenn es um Funktionsparameter des R-Wert-Referenztyps geht. R-Wert-Referenzen übermitteln wertvolle Informationen: Der Wert, auf den sie verweisen, ist ein R-Wert, was bedeutet, dass er temporär ist und nach Abschluss des Ausdrucks zerstört wird. Dies ermöglicht eine sichere Behandlung des referenzierten Werts als R-Wert.
Schlussfolgerung
Der Unterschied zwischen R-Wert- und L-Wert-Referenzen liegt nicht in ihrer Verwendbarkeit innerhalb von Ausdrücken, sondern darin, was möglich ist an sie gebunden sein. R-Wert-Referenzen liefern wichtige Informationen über die Art des referenzierten Werts und ermöglichen so ein effizientes Ressourcenmanagement und eine angemessene Behandlung als R-Wert.
Das obige ist der detaillierte Inhalt vonIst „bar' ein L-Wert oder ein R-Wert in „void foo(string&& bar)'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!