C++ glvalue


Ejemplo

Una expresión glvalue (un "lvalue generalizado") es cualquier expresión que tiene identidad, independientemente de si se puede mover o no. Esta categoría incluye lvalues ​​(expresiones que tienen identidad pero no se pueden mover) y xvalues ​​(expresiones que tienen identidad y se pueden mover desde), pero excluye prvalues ​​(expresiones sin identidad).

Si una expresión tiene un nombre , es un glvalue:

struct X { int n; };
X foo();

X x;
x; // has a name, so it's a glvalue
std::move(x); // has a name (we're moving from "x"), so it's a glvalue
              // can be moved from, so it's an xvalue not an lvalue

foo(); // has no name, so is a prvalue, not a glvalue
X{};   // temporary has no name, so is a prvalue, not a glvalue
X{}.n; // HAS a name, so is a glvalue. can be moved from, so it's an xvalue