A glvalue（generalized lvalue） is an expression whose evaluation determines the identity of an object, bit-field, or function.
A prvalue（pure rvalue） is an expression whose evaluation initializes an object or a bit-field, or computes the value of an operand of an operator, as specified by the context in which it appears, or an expression that has type cv void.
An xvalue（eXpiring value） is a glvalue that denotes an object or bit-field whose resources can be reused （usually because it is near the end of its lifetime）.
std::string s1 = "Hello "; std::string s2 = "world"; std::string&& s_rref = s1 + s2; // the result of s1 + s2 is an rvalue s_rref += ", my friend"; // I can change the temporary string! std::cout << s_rref << 'n'; // prints "Hello world, my friend"