Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Referencias Rvalue y Lvalue | Sección
Punteros y Referencias en C++

bookReferencias 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?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 12

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 1. Capítulo 12
some-alt