C++ · Avançado · Português · Técnico
categorias de valor
Classificação das expressões em lvalue, xvalue e prvalue, com os agrupamentos glvalue e rvalue. Determina o que pode ser movido, ligado a referências e elidido pelo compilador.
Onde usar
Surge ao entender por que std::move produz um xvalue e por que a elisão garantida do C++17 depende de prvalue. Em code review, ajuda a explicar mensagens de erro de ligação de referência.
Em código
int x = 0;
x; // lvalue
x + 1; // prvalue
int&& y = std::move(x); // xvalue
int&& r = 5;
r; // lvalue (tem nome)Exemplos
Para entender o erro, preciso rever as categorias de valor: isso é um xvalue ou um prvalue?
As categorias de valor explicam por que o std::move produz um xvalue.
Cuidado
A categoria é propriedade da expressão, não da variável: o nome r de tipo int&& é um lvalue.
Sinônimos
value categories