Следующие две строки кода не возвращают одно и то же значение. Любая причина для этого?
int i;
i = 1;
i = i + i++; //Returns 2, expecting 3
И
i = 1;
i = i++ + i; //Returns 3
Семантически это должно быть одно и то же a + b = b + a
, верно?
То же самое с уменьшением i
:
i = 1;
i = i - i--; //Returns 0, expecting 1
И
i = 1;
i = i-- - i; //Returns 1, expecting -1
Что меня еще больше смущает, так это использование операторов постинкремента:
i = 1;
i = i + ++i; //Returns 3
И
i = 1;
i = ++i + i; //Returns 4, expecting 3
То же самое снова с уменьшающим оператором:
i = 1;
i = i - --i; //Returns 1
И
i = 1;
i = --i - i; //Returns 0, expecting -1
Последний вопрос:
Как эти две строки интерпретируются компилятором?
i = i+++i; // is it i + ++i or i++ + i?
i = i---i; // is it i - --i or i-- - i?
i = 1; i = i + i++
Почему вы ожидаете3
здесь? - person Sriram Sakthivel   schedule 07.10.2013++
и/или--
с переменной, которая также используется в другом месте в том же выражении. Это слишком сложно читать. - person Matthew Watson   schedule 07.10.2013