Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Andrey Tarasevich                    2:5020/400     28 Sep 2002  01:34:37
 To : Vitaly Mayatskih
 Subject : <none>
 -------------------------------------------------------------------------------- 
 
 Fri Sep 27 2002 17:40, Vitaly Mayatskih wrote to Andrey Tarasevich:
 
  AT>> Hет. Hи о каком выполнении справа налево в данном случае и речи быть
  AT>> не может. Операции '^=' _ассоциируются_ справа налево. А в каком
  AT>> порядке они _выполняются_ - не определено. Почувствуй разницу. Hи язык 
  AT>> С, ни язык С++ не определяют и никогда не определяли порядок
  AT>> выполнения встроенных операций (кроме нескольких исключений типа && и
  AT>> ||).
 
  VM>         Я категорически не согласен. 
 
 Это не вопрос согласия/несогласия. Это вопрос знания/незнания и
 понимания/непонимания спецификации языка.
 
  VM> Hа порядок группирования и
  VM> вычисления операций ассоциативность влияет самым прямым образом. 
 
 Еще раз повторяю. Спецификация языка С++ черным по белому указывает в пункте
 5/4, что порядок вычисления операндов операторов, порядок вычисления
 подвыражений выражений и порядок возникновения побочных эффектов _не_
 _определен_, за исключением случаев, где это специально оговорено. Операторы
 присваивания не являются такими специально оговоренными случаями.
 
  VM> Когда в
  VM> выражении имеется несколько операторов одного приритета, то они
  VM> применяются в соответствии с их ассоциативностью. 
 
 Популярное заблуждение. Это относится только к операторам, определенным
 пользователем. А при использовании _встроенных_ операторов (т.е. при
 манипуляции _скалярными_ типами, как сказано в 5/4) ассоциативность операторов
 описывает только семантический смысл выражения (это что-то вроде
 "канонического" порядка вычисления выражения), но никоим образом не определяет
 конкретный порядок вычисления. Компилятор волен вычислять выражения как
 угодно, главное чтобы результат соответствовал спецификации языка. В данном
 случае спецификация языка говорит об этом выражении только одно -
 неопределенное поведение.
 
 Закроем на минутку глаза на это неопределенное поведение. Даже если бы порядок
 выполнения операторов в данном случае был бы определен, это все равно ничего
 бы не изменило. Момент и порядок возникновения _побочных_ _эффектов_ все равно
 остается неопределенным. (Повторяю, изменение левой части оператора
 присваивания является _побочным_ _эффектом_ оператора присваивания)
 
  VM> Свойством
  VM> коммутативности обладают только мультипликативные, аддитивные и
  VM> поразрядные операции, порядок вычисления в таком случае зависит от
  VM> компилятора. Hо к составному присваиванию это никакого отношения не
  VM> имеет.
 
 Двойная ошибка. 
 
 Во-первых, здесь ты выделяешь операторы присваивания в какую-то "особенную"
 группу по отношению к правилу 5/4. Это твои домыслы. Спецификация языка их ни
 в какую особенную группу не выделяет.
 
 Во-вторых, как уже говорил не раз, основной проблемой таких выражений является
 неопределенность порядка возникновения _побочных_ _эффектов_ (а не
 неопределенность порядка вычисления). Компилятор имеет право отложить все
 побочные эффекты (т.е. собственно присваивания) на конец вычисления выражения
 и выполнить их при этом в любом порядке. Т.е. компилятор в ответ на 'a ^= b ^=
 a ^= b' имеет право скомпилировать вот такой код (псевдокод)
 
   // Вычисление подвыражений
   t1 = a ^ b;
   t2 = b ^ t1;
   t3 = a ^ t2;
 
   // Выполнение побочных эффектов
   a = t3;
   b = t2;
   a = t1;
 
 Hесложно видеть, что никакого "обмена" при этом не произойдет.
 
 Bets regards,
 Андрей.
 
 P.S. Мы в глубоком оффтопике. Предлагаю перейти в su.c-cpp
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 <none>   stan72   21 Sep 2002 20:01:31 
 Re: <none>   Sergei Paschenko   23 Sep 2002 17:26:11 
 <none>   Dmitry Pyzhov   24 Sep 2002 01:07:14 
 Re: <none>   Andrey Tarasevich   25 Sep 2002 11:00:54 
 <none>   Dmitry Pyzhov   26 Sep 2002 11:28:38 
 Re: <none>   Andrey Tarasevich   27 Sep 2002 10:56:36 
 <none>   Vitaly Mayatskih   27 Sep 2002 17:40:43 
 <none>   Andrey Tarasevich   28 Sep 2002 01:34:37 
 Re: <none>   Anatoly Svishev   28 Sep 2002 00:33:11 
 Re: <none>   Andrey Tarasevich   28 Sep 2002 02:29:40 
 <none>   Aleksey Loginov   28 Sep 2002 11:09:12 
 Re: <none>   Vladislav Gusev   28 Sep 2002 12:30:15 
 Re: <none>   Pavel P   29 Sep 2002 10:27:02 
 <none>   Vitaly Mayatskih   29 Sep 2002 14:17:20 
 Re: <none>   Andrey Tarasevich   29 Sep 2002 23:29:43 
 Re: <none>   Anatoly Svishev   30 Sep 2002 03:07:53 
 Re: <none>   Andrey Tarasevich   30 Sep 2002 08:36:27 
 <none>   Ianos Gnatiuc   30 Sep 2002 22:54:13 
 <none>   Aleksey Loginov   01 Oct 2002 08:52:46 
 <none>   Ianos Gnatiuc   02 Oct 2002 10:59:01 
 <none>   Aleksey Loginov   03 Oct 2002 06:50:24 
 Re: <none>   Andrey Tarasevich   03 Oct 2002 07:40:22 
 Re: <none>   Vladislav Gusev   01 Oct 2002 16:36:43 
 <none>   Nickolas Hirgij   01 Oct 2002 22:50:02 
 Re: <none>   Pavel P   30 Sep 2002 06:22:38 
 <none>   Max Alekseyev   29 Sep 2002 22:46:08 
 Re: <none>   Andrey Tarasevich   30 Sep 2002 11:48:20 
 <none>   Max Alekseyev   30 Sep 2002 13:06:54 
 <none>   Andrey Tarasevich   01 Oct 2002 06:21:35 
 <none>   Serge Nozhenko   01 Oct 2002 15:08:24 
 Re: <none>   Andrey Tarasevich   01 Oct 2002 19:58:24 
 Re: <none>   Andrey Tarasevich   01 Oct 2002 21:34:18 
 <none>   Serge Nozhenko   02 Oct 2002 00:42:48 
 <none>   Andrey Tarasevich   02 Oct 2002 03:44:12 
 <none>   Mike Murov   02 Oct 2002 16:07:27 
 Re: <none>   Stanislav Yaroshenko   03 Oct 2002 01:33:40 
 <none>   Andrey Tarasevich   03 Oct 2002 03:01:09 
 <none>   Andrey Tarasevich   03 Oct 2002 03:49:50 
 Re: <none>   Vladimir A. Pertzel   30 Sep 2002 15:28:40 
 <none>   Ianos Gnatiuc   30 Sep 2002 23:02:32 
 <none>   Georgy Plechanov   23 Sep 2002 17:05:12 
 <none>   Igor Bychkov   24 Sep 2002 21:54:28 
 <none>   Nickolas Hirgij   24 Sep 2002 08:41:05 
 <none>   Ianos Gnatiuc   30 Sep 2002 00:50:35 
 <none>   Stanislav Shwartsman   30 Sep 2002 09:06:00 
 <none>   Ianos Gnatiuc   30 Sep 2002 22:16:12 
 Re: <none>   Vladislav Gusev   01 Oct 2002 16:12:30 
 <none>   Comoderator Of Ru Algorithms   02 Oct 2002 21:09:00 
 <none>   Ianos Gnatiuc   02 Oct 2002 12:02:13 
 Re: <none>   Vladislav Gusev   03 Oct 2002 19:25:24 
 <none>   Nickolas Hirgij   01 Oct 2002 20:38:42 
 Re: <none>   Vladislav Gusev   30 Sep 2002 13:25:00 
 <none>   Ianos Gnatiuc   30 Sep 2002 22:34:18 
 Re: <none>   Vladislav Gusev   01 Oct 2002 16:36:11 
 <none>   Stanislav Shwartsman   01 Oct 2002 22:35:23 
 Re: <none>   Vladislav Gusev   02 Oct 2002 13:14:46 
 <none>   Stanislav Shwartsman   02 Oct 2002 16:51:45 
 Re: <none>   Vladislav Gusev   03 Oct 2002 18:51:00 
 <none>   Dmitry Pyzhov   01 Oct 2002 01:26:34 
 <none>   Ianos Gnatiuc   01 Oct 2002 08:01:13 
 <none>   Nickolas Hirgij   01 Oct 2002 20:32:05 
 <none>   Kirill Frolov   03 Oct 2002 23:45:50 
 <none>   Igor Dolgov   04 Oct 2002 00:00:18 
Архивное /ru.algorithms/166792e65bee4.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional