2011-09-18 19 views
6

De 4,1/2lValue a RValue conversiones

El valor contenido en el objeto indicado por la lvalue es el resultado rvalue. Cuando se produce una conversión lvalue-r-value en el operando de sizeof (5.3.3), no se tiene acceso al valor contenido en el objeto referenciado , ya que ese operador no evalúa su operando.

Por curiosidad, me preguntaba, ¿se aplica lo mismo a las declaraciones if, for, while, es decir, lvalue se convierte a rvalue cuando se evalúa el resultado de la declaración?

Respuesta

7

Sí. Sin la conversión lvalue-to-rvalue, no puede leer su valor .

En términos generales, pensar en lvalue como una especie de contenedor, y rvalue como el valor contenido en el recipiente.

C++ 03, sección §3.10/7 lee,

Siempre que un lvalue aparece en un contexto en el que se espera un valor p, la lvalue se convierte a un valor p; ver 4.1, 4.2 y 4.3.

Leer junto con, § 4.1/2 (su cotización),

El valor contenido en el objeto indicado por la lvalue es el resultado rvalue.

Tema relacionado:

+0

En términos de estándar, ¿significa que 'contiene léxicamente un valor r'? Recuerdo haberlo leído, pero no estoy seguro de si lo estoy haciendo bien. – parc84

+0

@ parc84: Se ha agregado una cita de la especificación. – Nawaz

3

La respuesta es sí.

Cuando se espera un valor de bool, la conversión también se aplica. Deje que la prueba sea una variable para ver un ejemplo:

if(test) 

RValue de prueba, verdadera o falsa, se evalúa si el interior de la.