parc84
parc84

Reputation: 257

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?

Upvotes: 6

Views: 1227

Answers (2)

robermorales
robermorales

Reputation: 3488

The answer is yes.

When a bool rvalue is expected, the conversion also is applied. Let test be a variable to see an example:

if( test )

Rvalue of test, true or false, is evaluated inside the if.

Upvotes: 3

Sarfaraz Nawaz
Sarfaraz Nawaz

Reputation: 361422

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:

Upvotes: 7

Related Questions