Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Rvalue- und Lvalue-Referenzen | Section
C++-Zeiger und Referenzen

bookRvalue- 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?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 12

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 1. Kapitel 12
some-alt