Я понимаю, что следующий код, как известно, производит неопределенное поведение в C / C ++
int i = 1;
i = 2*i++;
cout << i << endl; // surprisingly 3, undefined...
Это дает ожидаемый результат 2 в Java / C #. Но является ли это гарантией в Java / C # или все еще неопределенным поведением?
В C # это очень хорошо определено.
Таким образом, значение переменной остается неизменным. Результат будет 2 с вашим делом здесь.
i = i++
Это так же как
t = i
i = i + 1
i = t
Такое выражение будет очень запутанным, когда оно станет частью составного оператора. Было бы очень желательно сохранить выражения простыми и менее запутанными для себя и других в долгосрочной перспективе.
Выражения оцениваются слева направо как в Java, так и в C #
Других решений пока нет …