<none>

From
Mike Murov (2:5030/976.55)
To
Serge Nozhenko
Date
2002-10-02T16:07:27Z
Area
RU.ALGORITHMS
Долгие лета, Serge!

Сpд Окт 02 2002 00:42, я пишу:

 SN> 01 Oct 02 19:58, Andrey Tarasevich wrote to Serge Nozhenko:

 >>>  AT> Итак, _вычислением_ выражения 'a ^= b' в C/C++ называется
 >>>  AT> процесс вычисления значения 'a ^ b'. Ни больше, ни меньше.
 >>>  AT> Величина 'a ^ b' называется _результатом_ выражения 'a ^= b'.
 >>>  AT> Все. Больше ничего в _результат_ выражения 'a ^= b' не
 >>>  AT> входит.
 >>>
 >>> [...дальнейшие рассуждения поскипаны...]
<skip here appear>
  Уважаемые господа!
  К сожалению не имею времени работать с оригинальным C++ стандартом и пользуюсь выжимками от Microsoft (MSDN, April 2000). Так вот, по исследуемому вопросу там сказано следующее:

Assignment Operators:  =, +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=

  An assignment operation assigns the value of the right-hand operand to the storage location named by the left-hand operand. Therefore, the left-hand operand of an assignment operation must be a modifiable l-value. After the assignment, an assignment expression has the value of the left operand but is not an l-value. The assignment-operator is one of the following:
<skipped>

  Так вот, насколько я понимаю <start> assign the value <skip> to the storage location named <end> довольно явно указывает на принудительную прямую модификацию памяти, которая же будет являтся и значением выражения. Причем для всей группы операторов присвоение является не каким-то доп.эффектом, а самым что ни на есть основным.

  А теперь рассуждения
  a^=b == a=(a^b) - если принять данную запись за верную (ессно чисто  логически, т.к.напр. для классов '^=' совершенно отдельный переопределяемый  оператор)
  a^=b^=a^=b == a=(a^(b=(b^(a=(a^b)))))  (Z)
  т.к. во всем вычислении идет прямое изменение памяти, то _не_ может быть изменения порядка раскрытия скобок (по представленному выше из MSDN).

P.S.относительно проблемы считаю, что со скобками a^=(b^=(a^=b)) все должно быть в ажуре на любом компиляторе, а вот без скобок...

P.P.S.видно у Билли тоже споры возникали подобные этому, т.к. писать "storage location named" вместо variable так просто не станут :)

P.P.P.S.если будете опровергать мою (.) зрения, пожалуйста опровергните для начала ее для правой части выражения (Z).

Еще увидимся, Serge.

--- GoldED/W32 3.0.1
 * Origin: Kill. Ем All. (2:5030/976.55)