an lvalue expression refers to an object’s identity
an rvalue expression refers to an object’s value
Rval Ref: be bound to a conversion, to literals, or to expressions that return an rvalue
Rval Ref: may be bound only to an object that is about to be destroyed
Lvalues Persist; Rvalues Are Ephemera
Functions that return lvalue references, along with the assignment, subscript,
dereference, and prefix increment/decrement operators, are all examples of
expressions that return lvalues. We can bind an lvalue reference to the result of any of
these expressions
Functions that return a nonreference type, along with the arithmetic, relational,
bitwise, and postfix increment/decrement operators, all yield rvalues. We cannot bind
an lvalue reference to these expressions, but we can bind either an lvalue reference to
const or an rvalue reference to such expressions.
We can destroy a moved-from object and can assign a new value to it, but
we cannot use the value of a moved-from object.