Search code examples
c++lvalue-to-rvalue

Lvalue to Rvalue conversions


From 4.1/2

The value contained in the object indicated by the lvalue is the rvalue result. When an lvalue-to-rvalue conversion occurs within the operand of sizeof (5.3.3) the value contained in the referenced object is not accessed, since that operator does not evaluate its operand.

Out of curiosity, I was wondering, does the same applies to the if, for, while statements, i.e lvalue is converted to rvalue when the result of statement is evaluated?


Solution

  • Yes. Without lvalue-to-rvalue conversion, it cannot read it's value.

    Loosely speaking, think of lvalue as some sort of container, and rvalue as the value contained in the container.

    C++03, section §3.10/7 reads,

    Whenever an lvalue appears in a context where an rvalue is expected, the lvalue is converted to an rvalue; see 4.1, 4.2, and 4.3.

    Read it along with, §4.1/2 (your quotation),

    The value contained in the object indicated by the lvalue is the rvalue result.

    Related topic: