Avatar ·

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