Developer's Topics
Chapter 2, Complying with standard C

Types for lvalues

Types for lvalues

const and volatile are part of an identifier's type, not its storage class. However, they are peculiar in that they are often removed from the top-most part of the type. This occurs when an object's value is fetched in the evaluation of an expression -- exactly at the point when an lvalue becomes an rvalue. (These terms arise from the prototypical assignment "L=R"; in which the left side must still refer directly to an object (an lvalue) and the right side need only be a value (an rvalue).) Therefore, only expressions that are lvalues can be qualified by const or volatile or both.