<none>
- From
- Serge Nozhenko (2:5020/175.1)
- To
- Andrey Tarasevich
- Date
- 2002-10-01T15:08:24Z
- Area
- RU.ALGORITHMS
01 Oct 02 06:21, Andrey Tarasevich wrote to Max Alekseyev:
MA>> Хорошо, теперь вспомним начальное выражение a ^= b ^= a ^= b;
MA>> Ассоциирование дает нам "канонический" порядок вычисления: a ^= (b ^=
MA>> (a ^= b)); Следуя этому порядку, значения a и b должны поменяться. Как
MA>> это будет делать компилятор - неважно - хоть через xchg. Но, как ты
MA>> сам сказал, результат должен получиться правильным.
AT> Нет! Я уже заострял внимание на этой важной детали, но почему-то на нее не
AT> обращают внимания. Все, что я сказал выше, относится только к _вычислению_
AT> _значения_ выражения, но никоим образом НЕ относится к выполнению побочных
AT> эффектов этого выражения.
AT> Еще раз (в который уже раз): каждое выражение в С/С++ имеет один
AT> _результат_ и ноль или больше _побочных_ _эффектов_. Для простоты
AT> предположим, что 'a' и 'b' - одного и того же целочисленного типа.
AT> Рассмотрим оператор
AT> a ^= b; // (1)
AT> Итак, _вычислением_ выражения 'a ^= b' в C/C++ называется процесс
AT> вычисления значения 'a ^ b'. Ни больше, ни меньше. Величина 'a ^ b'
AT> называется _результатом_ выражения 'a ^= b'. Все. Больше ничего в
AT> _результат_ выражения 'a ^= b' не входит.
[...дальнейшие рассуждения поскипаны...]
(5.17.1): ...The result of an assigment expression is the value stored in the left operand _after the assigment has taken place_...
Читать медленно. ;-)
Serge
--- Golded 2.41+
* Origin: Moccoletto (2:5020/175.1)