Możliwe duplikaty:
Why does this go into an infinite loop?i = i ++ nie zwiększa wartości. Czemu?
Rzeczy takie jak i = i++
mieć niezdefiniowanej zachowanie w C i C++, ponieważ wartość skalarnym obiektu wynosi zmiany dwa razy w tej samej wypowiedzi bez interwencji punkt sekwencji.
Jednak przypuszczam, że tego rodzaju wyrażenia mają dobrze zdefiniowane zachowanie w C# lub Java, ponieważ AFAIK ocena argumentu idzie od lewej do prawej i są punkty sekwencji na całym.
To powiedziawszy, spodziewam się, że i = i++
będzie odpowiednikiem i++
. Ale nie jest. Poniższy program wyprowadza 0
.
using System;
class Program
{
static void Main(string[] args)
{
int i = 0;
i = i++;
Console.WriteLine(i);
}
}
Czy możesz mi pomóc zrozumieć, dlaczego?
Zastrzeżenie: Jestem w pełni świadomy, że czy zachowanie powyższych konstruktów jest zdefiniowany, są głupie, bezużyteczny, nieczytelny, niepotrzebne i nie powinny być używane w kodzie. Jestem po prostu ciekaw.
@Dvvovator: Chcesz zostawic komentarz? –
Zazwyczaj nie :) – Tigran
ten został zapytany w ubiegłym roku o Javie, ale odpowiedział w języku C# (oba działają podobnie do tego przypadku): http://stackoverflow.com/questions/3831341/why-does-this-go- pętla w nieskończoność – BoltClock