Re: <none>
- From
- Andrey Tarasevich ()
- To
- Andrey Tarasevich
- Date
- 2002-10-01T21:34:18Z
- Area
- RU.ALGORITHMS
From: "Andrey Tarasevich" <atarasevich@telocity.com>
Tue Oct 01 2002 19:58, Andrey Tarasevich wrote to Serge Nozhenko:
>>
>> (5.17.1): ...The result of an assigment expression is the value stored
>> in the left operand _after the assigment has taken place_...
>>
>> Читать медленно. ;-)
>> ...
AT> Я уже читал. И медленно, и быстро :) Читать недостаточно, надо еще
AT> _понимать_, что именно хотели сказать этим текстом. Частично переведу на
AT> русский наиболее близко к смыслу: "Результатом assignment expression
AT> является значение, которое сохранится в левом операнде после выполнения
AT> присваивания". Надеюсь, теперь понятно, что вторая часть предложения
AT> носит чисто описательный характер, т.е. говорит о том, какое _значение_
AT> является результатом, но совершенно не говорит о том, когда именно будет
AT> выполнено присваивание.
В этом плане также полезно обратить внимание на формулировку в оригинальном
стандарте языка С.
С одной стороны, в разделе 6.3.16 Assignment operators стандарт языка С
говорит:
"... An assignment expression has the value of the left operand after the
assignment ..."
Заметь, что в этой формулировке тоже присутствует слово "after". И в этой
формулировке это слово тоже НЕ налагает никаких временнЫх ограничений. Здесь
НЕТ требования того, чтобы занесение нового значения в левый операнд делалось
до вычисления результата assignment expression. Это предложение просто
описывает, какое значение является результатом assignment expression -
значение является таким _как_ _будто_ оно "прошло сквозь" левый операнд (т.е.
было записано туда и затем прочитано оттуда). Повторяю: как будто.
Тем не менее авторы стандарта языка С все таки понимали, что наличие слова
"after" в вышеприведенной формулировке многими будет понято неправильно. А
именно, найдутся люди, которым покажется, что слово "after" налагает какие-то
временнЫе ограничения на момент занесения нового значения в левый операнд. Для
того, чтобы подчеркнуть неправильность такого толкования, ниже в этот же абзац
стандарта языка С было добавлено следующее предложение:
"The side effect of updating the stored value of the left operand shall occur
between the previous and the next sequence point"
На самом деле этого последнего предложения модно было и не добавлять - это
утверждение уже делалось в других местах стандарта С. Тем не менее авторы
стандарта решили его повторить непосредственно в 6.3.16 для того, чтобы еще
раз напомнить, что изменение значения левого операнда оператора присваивания
является _побочным_ _эффектом_ этого оператора и момент выполнения этого
измененеия (как и любого другого побочного эффекта) точно не определен.
Вышеупомянутое слово "after" ничего здесь не меняет.
--
Best regards,
Андрей.
--- ifmail v.2.15dev5
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)