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?
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?
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;
numero
es un lvalue.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.