Son y valores r

Cada expresión de C++ es un valor l o un valor rvalue.Un valor l hace referencia a un objeto que conserva más allá de una sola expresión.Puede considerar un valor l como objeto que tiene un nombre.Todas las variables, incluidas las variables no modificable (deconst), son son.Un valor r es un valor temporal que no conserva más allá de la expresión que lo utiliza.Para comprender mejor la diferencia entre los son y los valores r, considere el ejemplo siguiente:

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

En este ejemplo, x es un valor l porque conserva más allá de la expresión que lo define.La expresión 3 + 4 es un valor r porque se evalúa como un valor temporal que no se conserva más allá de la expresión que lo define.

El ejemplo siguiente muestra varios usos correctos e incorrectos de son y de valores r:

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

[!NOTA]

Los ejemplos de este tema se muestra el uso correcto e incorrecto cuando no sobrecargar operadores.Sobrecarga de operadores, puede crear una expresión como j * 4 un valor l.

El valor l y el valor rvalue de términos suelen utilizarse cuando hace referencia a referencias de objeto.Para obtener más información sobre las referencias, vea Declarador de referencias de valor l: y y Declarador de referencia Rvalue: &&.

Vea también

Referencia

Conceptos básicos

Declarador de referencias de valor l: y

Declarador de referencia Rvalue: &&