Строго ли определено поведение самопредставления postfix в C # / Java?

Я понимаю, что следующий код, как известно, производит неопределенное поведение в C / C ++

   int i = 1;
i = 2*i++;
cout << i << endl; // surprisingly 3, undefined...

Это дает ожидаемый результат 2 в Java / C #. Но является ли это гарантией в Java / C # или все еще неопределенным поведением?

1

Решение

В C # это очень хорошо определено.

  1. Это увеличивает переменную.
  2. Это присваивает старое значение переменной

Таким образом, значение переменной остается неизменным. Результат будет 2 с вашим делом здесь.

 i = i++

Это так же как

   t = i
i = i + 1
i = t

Такое выражение будет очень запутанным, когда оно станет частью составного оператора. Было бы очень желательно сохранить выражения простыми и менее запутанными для себя и других в долгосрочной перспективе.

Выражения оцениваются слева направо как в Java, так и в C #

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]