2011-09-13 17 views
7
cout<<(x++)++; //fails 
cout<<++(++x); //passes 

¿Por qué falla el incremento de publicación? Lo veo suceder, pero no estoy seguro de la razón técnica.Operador de incremento de publicación ++

+2

post-incremento temporal? – Benoit

+0

¿Cuál es el tipo de 'x'? Eso es muy importante Si es un built-in, 'operator ++' no es una llamada de función. – MSalters

+0

Está construido en decir, int x = 5; – user835194

Respuesta

13

x++ devuelve un valor r para que no pueda volver a ejecutar ++ en él. Por otro lado, ++x devuelve un valor l para que pueda realizar ++ en él.

+1

también vea [esta pregunta] (http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-is-not) – Benoit

4

Así es como funcionan los operadores de incremento en C/C++.

Si ponemos la ++ después de la variable (incremento postfijo), toda la expresión se evalúa al valor de la variable antes del incremento.

Si coloca el ++ antes de la variable (incremento de prefijo), la expresión evalúa el valor después de la operación de incremento.

Mientras que la operación de prefijo devuelve una referencia a la variable pasada, la versión de postfix devuelve un valor temporal, que no debe incrementarse.

1

Exactamente. no puedes realizar un ++ sobre un Rvalue. una buena explicación acerca de cómo funciona rvalue se da here.

Cuestiones relacionadas