Referencias Rvalue y Lvalue
Desliza para mostrar el menú
Lvalues y Rvalues
En C++, lvalues y rvalues son dos categorías básicas de expresiones:
- Lvalue: un objeto o ubicación de memoria que tiene un nombre y puede aparecer en el lado izquierdo de una asignación;
- Rvalue: un valor temporal o literal que no tiene una dirección de memoria persistente y usualmente aparece en el lado derecho de una asignación.
Ejemplos:
int x = 10; // x is an lvalue, 10 is an rvalue
x = 20; // x (lvalue) can be assigned a new value (rvalue 20)
Referencias a Lvalue
Una referencia a lvalue permite crear un alias para una variable existente (un lvalue). Se declara usando un solo &:
int a = 5;
int& ref = a; // ref is an lvalue reference to a
ref = 8; // changes the value of a to 8
- Las referencias a lvalue no pueden enlazarse a rvalues (temporales o literales).
Referencias a Rvalue
Una referencia a rvalue permite enlazar una referencia a un valor temporal (un rvalue). Se declara usando &&:
int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
- Las referencias a rvalue no pueden enlazarse a lvalues (variables con nombre).
- Son útiles para optimizar el código, como mover recursos en lugar de copiarlos.
Reglas de Enlace de Referencias
- Las referencias a lvalue (
&) se enlazan a lvalues. - Las referencias a rvalue (
&&) se enlazan a rvalues.
Ejemplo:
int x = 7;
int& lref = x; // valid: lref binds to lvalue x
// int& lref2 = 8; // error: cannot bind lvalue reference to rvalue
int&& rref = 8; // valid: rref binds to rvalue 8
// int&& rref2 = x; // error: cannot bind rvalue reference to lvalue
Comprender estos conceptos ayuda a escribir código C++ más seguro y eficiente, especialmente al trabajar con características modernas como la semántica de movimiento.
¿Todo estuvo claro?
¡Gracias por tus comentarios!
Sección 1. Capítulo 12
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Sección 1. Capítulo 12