i = i ++ doesn ' t инкремент i. Почему? [дубликат]

Возможные дубликаты:
Почему это переходит в бесконечный цикл?

Вещи например, 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);
    }
}

Не могли бы вы помочь мне понять, почему?

Отказ от ответственности: Я полностью осознаю, что независимо от того, определено ли поведение вышеупомянутых конструкций, они глупый, бесполезный, нечитаемый, ненужный и не должен использоваться в коде. Мне просто любопытно.

31
задан Community 23 May 2017 в 12:17
поделиться