Muito obrigado! A otimização eu sei que ocorre, mas não entendo porque em x=x-1 ele fica 9 e em x=x-- ele fica 10. Em ambos ele recebe o valor de x e decrementa, mas os resultados são diferentes. Por que?
adicionado 8 minutos depois
Muito obrigado pela sua resposta. Mas não consegui entender porque na terceira expressão o valor de x=10 é executado se na linha anterior o valor deste foi modificado para 9. Ele está fazendo x=10 duas vezes, quando eu só pedi para ele fazer 1 vez. Então para mim ficou sem sentido. Passo a passo:
Primeiro: x-- retorna o valor de 10. Beleza faz sentido, afinal ele vai diminuir logo tem que saber quanto vale x.
Segundo: x-- irá decrementar o valor ficando 9. Ok
Terceiro: mesmo tendo dado 9 na expressão anterior o compilador faz x=x, ao invés da expressão x=9. Seria isso? Então ele está usando x posterior da expressão da direita duas vezes, uma vez na primeira operação e outra vez aqui. Então isso não seria um erro afinal o x só aparece 1 vez sendo considerado duas vezes?
adicionado 12 minutos depois
Mas se o valor de X é 9, porque ele recebe 10? E porque a variável é lida duas vezes. Então o compilador utilizar o x para fazer x-- e utiliza o mesmo x para x=x ao invés de x=x-1? Para mim, o x ia receber o valor de 10, ficando x=--. Não entendi porque a variável é lida duas vezes? O x não está a esquerda, então não seria: x=x--, não seria a mesma coisa que: x=10, x=x-1?