Udostępnij za pośrednictwem


Lvalues i Rvalues

Każdy wyrażenia języka C++ jest lvalue lub rvalue.Lvalue odnosi się do obiektu, który będzie się powtarzał, poza pojedyncze wyrażenie.Lvalue można traktować jako obiekt, który ma nazwę.Wszystkie zmienne, łącznie z nonmodifiable (const) są zmienne, lvalues.Rvalue jest tymczasowe wartość, która nie utrzymują się poza wyrażenie, które z niej korzysta.Aby lepiej zrozumieć różnicę między lvalues i rvalues, rozważmy następujący przykład:

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

W tym przykładzie x jest lvalue, ponieważ obowiązuje ona, poza wyrażenie, które definiuje ją.Wyrażenie 3 + 4 jest rvalue, ponieważ wynikiem tymczasowe wartość, która nie utrzymują się poza wyrażenie, które definiuje ją.

W poniższym przykładzie zademonstrowano kilka zwyczajów poprawne i niepoprawne, lvalues i 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;
}

[!UWAGA]

Przykłady w tym temacie ilustrują poprawny i niepoprawny sposób użycia, gdy podmioty gospodarcze nie są przeciążone.Przeciążając operatory, można wprowadzać wyrażenia takie jak j * 4 lvalue.

Warunki lvalue i rvalue są często używane przy odwoływaniu się do odwołania do obiektu.Aby uzyskać więcej informacji o odwołaniach, zobacz Odwołanie lValue; niewłaściwy deklarator: & i Odwołanie Rvalue; niewłaściwy deklarator: & &.

Zobacz też

Informacje

Podstawowe pojęcia

Odwołanie lValue; niewłaściwy deklarator: &

Odwołanie Rvalue; niewłaściwy deklarator: & &