ExpertiDict

C++ · Avançado · Português · Técnico

categorias de valor

kateɡoˈɾiɐz dʒi vaˈloʁlocução nominal

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

Veja também

Todos os termos de C++