Avatar ·

O que são sequence points e como eles estão relacionados ao comportamento indefinido em C++?

Olá a todos! Comecei a estudar C++ e me deparei com uma situação muito estranha. Escrevo um código simples: ```cpp int i = 0; int result = i++ + i++; ``` Eu esperava que result fosse igual a 1 (0 + 1), mas o compilador retorna 0, 1 ou até mesmo algum outro número. E se eu escrever `i = i++ + 1`, o resultado é totalmente imprevisível. Disseram-me que isso está relacionado a "sequence points" e "comportamento indefinido" (undefined behavior). Mas não entendo o que isso significa. Podem explicar em palavras simples? Por que o compilador não pode simplesmente executar as operações da esquerda para a direita? E como saber em quais casos o código é seguro e em quais não é? Por favor, deem exemplos de código correto e incorreto. <<>>

O que são sequence points?

Sequence points são momentos na execução do programa em que todos os efeitos colaterais de cálculos anteriores são garantidamente concluídos, e os subsequentes ainda não começaram. Em palavras simples: são "pontos de verificação" onde o estado