Возьмите следующий код (который можно использовать в качестве консольного приложения):
static void Main(string[] args)
{
int i = 0;
i += i++;
Console.WriteLine(i);
Console.ReadLine();
}
Результат i
равен 0. Я ожидал 2 (как это делали некоторые мои коллеги). Вероятно, компилятор создает некоторую структуру, которая приводит к нулю i
.
Причина, по которой я ожидал 2, заключается в том, что в моей мысли мы сначала оцениваем инструкцию правой руки, увеличивая я с 1. Чем она добавляется к i. Поскольку я уже 1, он добавляет 1 к 1. Итак, 1 + 1 = 2. Очевидно, это не то, что происходит.
Можете ли вы объяснить, что делает компилятор или что происходит во время выполнения? Почему результат равен нулю?
Некоторый отказ от ответственности: я абсолютно уверен, что вы не будете (и, вероятно, не должны) использовать этот код. Я знаю, что никогда не буду. Тем не менее, мне интересно узнать, почему он действует таким образом и что происходит точно.