O que são pontos de sequência (sequence points) e como eles se relacionam com comportamento indefinido em C++?
Olá a todos! Sou um desenvolvedor C++ iniciante e recentemente me deparei com o conceito de "pontos de sequência" (sequence points). Em muitos fóruns, escrevem que violar as regras dos pontos de sequência leva a comportamento indefinido (undefined behavior), mas não entendo completamente o que isso significa na prática.
Aqui está um exemplo simples que me confunde:
```cpp
int i = 0;
int result = i++ + i++;
```
Li em algum lugar que esse código causa comportamento indefinido. Mas por quê? À primeira vista, parece que o resultado seria previsível: primeiro pega-se o valor antigo de `i` (0), depois ele é incrementado, e assim duas vezes. Eu esperaria que `result` se tornasse `0 + 1 = 1`, e `i` se tornasse `2`. Mas o compilador diz que isso é UB.
Outro exemplo:
```cpp
int arr[5] = {0};
int i = 0;
arr[i] = i++;
```
Aqui, estou atribuindo um valor a um elemento do array usando um índice que é modificado. Não entendo qual valor do índice será usado — o antigo ou o novo? E por que isso é considerado perigoso?
Você pode