Возможные дубликаты:
Почему это происходит в бесконечном цикле?
Такие вещи, как i = i++
, имеют поведение undefined в C и С++, потому что значение скалярного объекта изменяется дважды внутри одного и того же выражения без промежуточной точки последовательности.
Однако я полагаю, что эти выражения имеют хорошо определенное поведение на С# или Java, потому что AFAIK оценивает аргумент слева направо и есть точки последовательности по всему.
Тем не менее, я ожидаю, что i = i++
будет эквивалентен i++
. Но это не так. Следующая программа выводит 0
.
using System;
class Program
{
static void Main(string[] args)
{
int i = 0;
i = i++;
Console.WriteLine(i);
}
}
Не могли бы вы помочь мне понять, почему?
Отказ от ответственности: Я полностью осознаю, что независимо от того, определено ли поведение вышеупомянутых конструкций, они глупы, бесполезны, нечитаемы, не нужны и не должны использоваться в коде. Мне просто интересно.