Referências Rvalue e Lvalue
Deslize para mostrar o menu
Lvalues e Rvalues
Em C++, lvalues e rvalues são duas categorias básicas de expressões:
- Lvalue: um objeto ou local de memória que possui um nome e pode aparecer no lado esquerdo de uma atribuição;
- Rvalue: um valor temporário ou literal que não possui um endereço de memória persistente e geralmente aparece no lado direito de uma atribuição.
Exemplos:
int x = 10; // x is an lvalue, 10 is an rvalue
x = 20; // x (lvalue) can be assigned a new value (rvalue 20)
Referências Lvalue
Uma referência lvalue permite criar um alias para uma variável existente (um lvalue). É declarada usando um único &:
int a = 5;
int& ref = a; // ref is an lvalue reference to a
ref = 8; // changes the value of a to 8
- Referências lvalue não podem ser associadas a rvalues (temporários ou literais).
Referências Rvalue
Uma referência rvalue permite associar uma referência a um valor temporário (um rvalue). É declarada usando &&:
int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
- Referências rvalue não podem ser associadas a lvalues (variáveis nomeadas).
- São úteis para otimizar o código, como mover recursos ao invés de copiá-los.
Regras de Associação de Referências
- Referências lvalue (
&) associam-se a lvalues. - Referências rvalue (
&&) associam-se a rvalues.
Exemplo:
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
A compreensão desses conceitos ajuda a escrever códigos C++ mais seguros e eficientes, especialmente ao trabalhar com recursos modernos como semântica de movimento.
Tudo estava claro?
Obrigado pelo seu feedback!
Seção 1. Capítulo 12
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Seção 1. Capítulo 12