6

¿Es (++i)++ comportamiento indefinido? ¿Es posible que el efecto secundario del incremento de prefijo ocurra después de recuperar el objeto incrementado para que funcione el incremento de postfijo? Eso me parece extraño.¿Es (++ i) ++ comportamiento indefinido?

Mi intuición dice que esto no está definido en C++ 03 y está bien definido en C++ 11. ¿Estoy en lo cierto?

+0

Tu instinto es correcto. – ybungalobill

+43

¿Por qué las personas hacen tantas preguntas sobre esto? Simplemente no lo hagas. A quién le importa lo que hace - ** Es un código terrible, y nunca debería escribirse de todos modos. ** – jjnguy

+12

@jjnguy: Dibujaría una distinción entre "nunca se debe escribir" y "nunca se debe usar en el código de producción que haga algo importante" " A menudo es bueno escribir un código malicioso conocido para aprender de él. Fallar las cosas de una manera controlada, probar las fallas predichas, etc. – David

Respuesta

11

Mi intuición dice que esto no está definido en C++ 03 y está bien definido en C++ 0x.

Sí, tienes razón. El comportamiento no está definido en C++ 03 porque está intentando modificar i más de una vez entre dos puntos de secuencia.

El comportamiento está bien definido en C++ 0x porque (++i)++ es equivalente a (i += 1)++. Los efectos secundarios del operador += se ordenan en relación con ++ (incremento posterior) y, por lo tanto, el comportamiento está bien definido.

0

Este es un comportamiento indefinido ya que i se está modificando más de una vez entre dos puntos de secuencia.

Cuestiones relacionadas