duplicados posibles:
Why does this go into an infinite loop?i = i ++ no incrementa i. ¿Por qué?
Cosas como i = i++
tienen un comportamiento no definido en C y C++ porque el valor de un objeto de escalar es cambios dos veces dentro de la misma expresión sin intervenir punto secuencia.
Sin embargo supongo que este tipo de expresiones tiene un comportamiento bien definido en C# o Java, porque que yo sepa la evaluación del argumento va a la izquierda a la derecha y hay secuencia de puntos por todas partes.
Dicho esto, esperaría que i = i++
fuera equivalente a i++
. Pero no lo es. El siguiente programa produce 0
.
using System;
class Program
{
static void Main(string[] args)
{
int i = 0;
i = i++;
Console.WriteLine(i);
}
}
¿Podría ayudarme a entender por qué?
responsabilidad: Soy plenamente consciente de que si el comportamiento de las construcciones anteriormente mencionado se define, son tonto, inútil, ilegibles, innecesario y no se deben utilizar en el código. Tengo curiosidad.
@Downvoter: ¿Te gustaría dejar un comentario? –
Por lo general, no :) – Tigran
Esto se preguntó el año pasado sobre Java, pero respondió en C# (ambos funcionan de manera similar para este caso): http://stackoverflow.com/questions/3831341/why-does-this-go- into-an-infinite-loop – BoltClock