2

Estaba investigando en Internet y me encontré con algunas páginas que decían que el lvalue siempre iba a la izquierda y me encontré con otras que decían que no siempre.

¿Cual es la verdad?

Federico Choy
  • 307
  • 1
  • 5
  • Mira [ask] para que tu pregunta sea mejor recibida. También, aprovecha y haz el [tour] para entender mejor cómo funcionamos y de paso obtener tu primera [medalla](https://es.stackoverflow.com/help/badges)! – gbianchi Jul 19 '20 at 03:56
  • ¿Responde a tu duda [esta respuesta](https://es.stackoverflow.com/questions/61306/qué-son-las-rvalues-lvalues-xvalues-glvalues-y-prvalues)? –  Aug 07 '20 at 19:46

1 Answers1

0

La l y la r en lvalue y en rvalue estan por motivos historicos. Para simplificar que es cada uno, lo veriamos de la siguiente manera:

int numero = 5 + 5;
  • lvalue: Todos los valores a los que le pongamos nombre. por ejemplo numero es un lvalue.
  • rvalue: Son los valores a los que no les hemos asignado un nombre, son valores temporales. 5 + 5 es un rvalue, uno que solo existe momentáneamente y luego es asignado a un lvalue.

Pero, en realidad no tienen que estar del lado izquierdo el lvalue ni del derecho el rvalue. Fijate en el siguiente ejemplo:

#include<string>

int main(void) {
    std::string s("Hola");
    s + s = s;
    return 0;
}

Es raro, pero el programa compila y corre. Lo que hace es crear un temporal o rvalue que va a almacenar el valor de s+s y despues a este rvalue se le asigna el valor de s, que es un lvalue. Entonces no es cierto lo que decian en las paginas, ambos pueden estar de cualquier lado.

Pablochaches
  • 2,505
  • 1
  • 5
  • 21