C++ glvalue


Esempio

Un'espressione glvalue (a "lvalue generalizzato") è qualsiasi espressione che abbia identità, indipendentemente dal fatto che possa essere spostata o meno. Questa categoria include lvalue (espressioni che hanno identità ma non possono essere spostate da) e xvalues ​​(espressioni che hanno identità e possono essere spostate da), ma esclude prvalues ​​(espressioni senza identità).

Se un'espressione ha un nome , è un glivalue:

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