Freigeben über


Lvalues und Rvalue

Jeder C++-Ausdruck ist entweder ein lvalue oder einen R-Wert.Ein lvalue verweist auf ein Objekt an, das zu einem einzelnen Ausdruck hinaus beibehalten wird.Sie können eine Verbindung mit einem lvalue als ein Objekt vorstellen, das über einen Namen verfügt.Alle Variablen, einschließlich nicht veränderbare (const), Variablen lvalues sind.Ein R-Wert ist ein temporärer Wert, der nicht über dem Ausdruck hinaus beibehalten wird, der das Element verwendet.Um den Unterschied zwischen lvalues besser zu verstehen und rvalues Betrachten Sie das folgende Beispiel:

// lvalues_and_rvalues1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
   int x = 3 + 4;
   cout << x << endl;
}

In diesem Beispiel ist x ein lvalue, da es über dem Ausdruck hinaus beibehalten wird, der er definiert.Der Ausdruck 3 + 4 handelt es sich um einen R-Wert, weil er zu einem temporären Wert ergibt, der nicht über dem Ausdruck hinaus beibehalten wird, der er definiert.

Das folgende Beispiel zeigt mehrere richtige und falsche Verwendung von lvalues und rvalues:

// lvalues_and_rvalues2.cpp
int main()
{
   int i, j, *p;

   // Correct usage: the variable i is an lvalue.
   i = 7;

   // Incorrect usage: The left operand must be an lvalue (C2106).
   7 = i; // C2106
   j * 4 = 7; // C2106

   // Correct usage: the dereferenced pointer is an lvalue.
   *p = i; 

   const int ci = 7;
   // Incorrect usage: the variable is a non-modifiable lvalue (C3892).
   ci = 9; // C3892

   // Correct usage: the conditional operator returns an lvalue.
   ((i < 3) ? i : j) = 7;
}
HinweisHinweis

Die Beispiele in diesem Thema veranschaulichen richtige und falsche Verwendung, wenn Operatoren nicht überladen werden.Mit Operatoren überladen, können Sie einen Ausdruck wie j * 4 ein lvalue machen.

Die Ausdrücke lvalue und R-Wert werden häufig verwendet, wenn Sie Objektverweise beziehen.Weitere Informationen über Verweise finden Sie unter Lvalue-Bezugsdeklarator: &. und Rvalu-Verweis-Deklarator: &&.

Siehe auch

Referenz

Grundlegende Konzepte

Lvalue-Bezugsdeklarator: &.

Rvalu-Verweis-Deklarator: &&