Avatar ·

¿Qué son los sequence points y cómo se relacionan con el undefined behavior en C++?

¡Hola a todos! Empecé a estudiar C++ y me encontré con una situación muy extraña. Escribo un código simple: ```cpp int i = 0; int result = i++ + i++; ``` Esperaba que result fuera 1 (0 + 1), pero el compilador da a veces 0, a veces 1, o incluso algún otro número. Y si escribo `i = i++ + 1`, el resultado es completamente impredecible. Me dijeron que esto está relacionado con los "sequence points" y el "undefined behavior". Pero no entiendo qué son. ¿Pueden explicarlo en palabras simples? ¿Por qué el compilador no puede simplemente ejecutar las operaciones de izquierda a derecha? ¿Y cómo saber cuándo el código es seguro y cuándo no? Por favor, den ejemplos de código correcto e incorrecto. <<>>

¿Qué son los sequence points?

Los sequence points son momentos en la ejecución del programa en los que todos los efectos secundarios de los cálculos anteriores están garantizados de haberse completado, y los siguientes aún no han comenzado. En palabras simples: son "puntos de control" donde el estado