<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)