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