Partilhar via


Lvalues e Rvalues

Todas as expressões C++ é lvalue ou um rvalue.Lvalue refere-se a um objeto que persiste por mais de uma única expressão.Você pode pensar lvalue como um objeto que tem um nome.Todas as variáveis, incluindo o nonmodifiable (const) variáveis, são lvalues.Um rvalue é um valor temporário que não persistirem além a expressão que o utiliza.Para compreender melhor a diferença entre lvalues e rvalues, considere o exemplo a seguir:

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

Neste exemplo, x é lvalue porque ele persiste por mais a expressão que define a ele.A expressão 3 + 4 é um rvalue, porque ela é avaliada como um valor temporário que não persistirem além da expressão que define a ele.

O exemplo a seguir demonstra vários usos corretos e incorretos de lvalues e 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;
}
ObservaçãoObservação

Os exemplos neste tópico ilustram o uso correto e incorreto quando os operadores não estão sobrecarregados.Pela sobrecarga de operadores, você pode fazer uma expressão, como j * 4 lvalue.

Os termos lvalue e rvalue são geralmente usados quando você fizer referência a referências de objeto.Para obter mais informações sobre referências, consulte Declarador de referência lvalue: & e Declarador de referência Rvalue: & &.

Consulte também

Referência

Conceitos básicos

Declarador de referência lvalue: &

Declarador de referência Rvalue: & &