Sdílet prostřednictvím


Hodnoty Lvalue a Rvalue

Každý výraz jazyka C++ je l hodnota nebo r hodnota.l hodnota odkazuje na objekt, který bude zachován po jednom výrazu.l hodnotu si lze představit jako objekt, který má název.Všechny proměnné, včetně nemodifikovatelných proměnných (const) jsou l hodnoty.R hodnota je dočasná hodnota, která nebude zachována po výrazu, který ji používá.Aby bylo možné lépe pochopit rozdíl mezi l hodnotami a r hodnotami, je třeba zvážit následující příklad:

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

V tomto příkladu je x l hodnota, protože zůstává zachována po výrazu, který ji definuje.Výraz 3 + 4 je r hodnota, protože je vyhodnocen jako dočasná hodnota, která není zachována po výrazu, který ji definuje.

Následující příklad ukazuje několik správných a nesprávných použití l hodnot a r hodnot:

// 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;
}

[!POZNÁMKA]

Příklady v tomto tématu ukazují správné a nesprávné použití, v případě, že operátory nejsou přetíženy.Přetěžováním operátorů lze vytvořit výraz jako l hodnotu j * 4.

Podmínky l hodnoty a r hodnoty jsou často používány při odkazu na odkazy objektu.Další informace naleznete v tématech Deklarátor odkazu Lvalue: & a Deklarátor odkazu hodnoty R: &&.

Viz také

Referenční dokumentace

Základní koncepty

Deklarátor odkazu Lvalue: &

Deklarátor odkazu hodnoty R: &&