The term lvalue has been with C (and was carried forward to C++ and expanded later on). There was no rvalue to begin with. The draft I have (N1570) does list two occurrences of the term rvalue -- oncee in footnote #64 and once in the index.
In a nutshell: In the C world you have two types of objects -- lvalues and everything else.
Note that footnotes are not part of the standard but they can provide some helpful insights. Here goes footnote 64:
64) The name ‘‘lvalue’’ comes originally from the assignment expression E1 = E2, in which the left
operand E1 is required to be a (modifiable) lvalue. It is perhaps better considered as representing an
object ‘‘locator value’’. What is sometimes called ‘‘rvalue’’ is in this International Standard described
as the ‘‘value of an expression’’.
An obvious example of an lvalue is an identifier of an object. As a further example, if E is a unary
expression that is a pointer to an object, *E is an lvalue that designates the object to which E points.
This gives a good start. Now, bear in mind that an expression is built up from objects (and operators but we'll get there in a bit), and there are two fundamental things that you need to worry about when dealing with objects: Type and Value. Let's see what does the standard say about the type restrictions then (6.3.2.1/p1):
An lvalue is an expression (with an object type other than void) that potentially
designates an object;64) if an lvalue does not designate an object when it is evaluated, the behavior is undefined.
Also, note the next line which is important:
When an object is said to have a particular type, the type is
specified by the lvalue used to designate the object.
So, an lvalue can be used as a substitute for the type (we'll see this too). Next, let us take a look at the contexts where an object is an lvalue (6.3.2.1/2):
when it is the operand of the sizeof operator, the _Alignof operator, the
unary & operator, the ++ operator, the -- operator, or the left operand of the . operator
or an assignment operator
So, these are the operators that you need to keep an eye out for. In all other cases:
an lvalue that does not have array type is converted to the
value stored in the designated object (and is no longer an lvalue); this is called lvalue
conversion.
There are two special types: arrays and function designators. These decay i.e. are converted to an expression with type ‘‘pointer to type’’ that points
to the initial element of the array object and is not an lvalue / "pointer to function returning type". (Remember, we had paused on the fact that lvalues can work as types -- this is exactly what they do with sizeof
and _Alignof
!)