Rvalue- und Lvalue-Referenzen
Swipe um das Menü anzuzeigen
Lvalues und Rvalues
In C++ sind Lvalues und Rvalues zwei grundlegende Kategorien von Ausdrücken:
- Lvalue: Ein Objekt oder Speicherort, der einen Namen hat und auf der linken Seite einer Zuweisung stehen kann;
- Rvalue: Ein temporärer Wert oder Literal, der keine beständige Speicheradresse besitzt und üblicherweise auf der rechten Seite einer Zuweisung erscheint.
Beispiele:
int x = 10; // x is an lvalue, 10 is an rvalue
x = 20; // x (lvalue) can be assigned a new value (rvalue 20)
Lvalue-Referenzen
Eine Lvalue-Referenz ermöglicht es, einen Alias für eine bestehende Variable (ein Lvalue) zu erstellen. Sie wird mit einem einzelnen & deklariert:
int a = 5;
int& ref = a; // ref is an lvalue reference to a
ref = 8; // changes the value of a to 8
- Lvalue-Referenzen können nicht an Rvalues (temporäre Werte oder Literale) gebunden werden.
Rvalue-Referenzen
Eine Rvalue-Referenz ermöglicht es, eine Referenz an einen temporären Wert (ein Rvalue) zu binden. Sie wird mit && deklariert:
int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
- Rvalue-Referenzen können nicht an Lvalues (benannte Variablen) gebunden werden.
- Sie sind nützlich zur Optimierung des Codes, zum Beispiel um Ressourcen zu verschieben statt zu kopieren.
Regeln für Referenzbindung
- Lvalue-Referenzen (
&) binden an Lvalues. - Rvalue-Referenzen (
&&) binden an Rvalues.
Beispiel:
int x = 7;
int& lref = x; // valid: lref binds to lvalue x
// int& lref2 = 8; // error: cannot bind lvalue reference to rvalue
int&& rref = 8; // valid: rref binds to rvalue 8
// int&& rref2 = x; // error: cannot bind rvalue reference to lvalue
Das Verständnis dieser Konzepte hilft dabei, sichereren und effizienteren C++-Code zu schreiben, insbesondere beim Arbeiten mit modernen Funktionen wie Move Semantics.
War alles klar?
Danke für Ihr Feedback!
Abschnitt 1. Kapitel 12
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Abschnitt 1. Kapitel 12