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 ++
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 ++
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.
también vea [esta pregunta] (http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-is-not) – Benoit
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.
Exactamente. no puedes realizar un ++ sobre un Rvalue. una buena explicación acerca de cómo funciona rvalue se da here.
post-incremento temporal? – Benoit
¿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
Está construido en decir, int x = 5; – user835194