переходим к делу, ответ таков: «s равно 20, а t не может быть определено». Я понимаю ту часть, что s равна 20, но почему t нельзя определить? Пожалуйста помогите!
Рассмотрим этот код: int s = 20; int t = s++ + --s;. Каковы значения s и t?
Ответы (2)
int s = 20;
int t = s++ + --s;
Работа: увеличение (пост-инкремент) с до 21 (текущее значение 20) + уменьшение (преддекремент) с до 20 (текущее значение 20).
So, t=20+20;
And s =20;
После учета приоритета и круглых скобок Java гарантирует, что выражения будут оцениваться слева направо. Например, чтобы вычислить функцию eat() + drink() — beMerry(), Java сначала вычислит функцию eat(), затем drink(), затем выполнит сложение, затем вычислит функцию beMerry() и, наконец, выполнит вычитание. eat() вычисляется перед drink(), потому что eat() находится слева от drink(), а выражения вычисляются слева направо. Эта гарантия важна, потому что вызовы eat() и drink() могут иметь побочные эффекты, которые были бы другими, если бы они вызывались в противоположном порядке.
Прочтите это:
Поскольку оператор увеличения/уменьшения изменяет свой операнд, использование такого операнда более одного раза в одном и том же выражении может привести к неопределенным результатам. Например, в таких выражениях, как x − ++x, неясно, в какой последовательности должны выполняться операторы вычитания и приращения. Подобные ситуации усугубляются, когда компилятор применяет оптимизации, что может привести к тому, что порядок выполнения операций будет отличаться от того, что задумал программист.
Теперь ваш ответ должен быть довольно ясным. Мне кажется, что значение t может варьироваться в зависимости от компилятора/оптимизации.
Вот еще немного информации: http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Sequence-Points-Constrain-Expressions
t
можно определить: ideone.com/6ja0Kv - person Paul Bellora   schedule 11.02.2013