Avatar ·

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

¡Hola a todos! Soy un desarrollador principiante de C++ y recientemente me encontré con el concepto de "sequence points". En muchos foros escriben que violar las reglas de los sequence points conduce a comportamiento indefinido (undefined behavior), pero no entiendo del todo qué significa esto en la práctica. Aquí hay un ejemplo simple que me confunde: ```cpp int i = 0; int result = i++ + i++; ``` Leí en algún lugar que este código causa comportamiento indefinido. Pero, ¿por qué? A primera vista, parece que el resultado sería predecible: primero se toma el valor antiguo de `i` (0), luego se incrementa, y así dos veces. Esperaría que `result` fuera `0 + 1 = 1` y que `i` fuera `2`. Pero el compilador dice que es UB. Otro ejemplo: ```cpp int arr[5] = {0}; int i = 0; arr[i] = i++; ``` Aquí asigno un valor a un elemento del array usando un índice que cambia. No entiendo qué valor del índice se usará: ¿el antiguo o el nuevo? ¿Y por qué se considera peligroso?