|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrey Tarasevich 2:5020/400 01 Oct 2002 21:34:18 To : Andrey Tarasevich Subject : Re: <none> -------------------------------------------------------------------------------- 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> присваивания". Hадеюсь, теперь понятно, что вторая часть предложения AT> носит чисто описательный характер, т.е. говорит о том, какое _значение_ AT> является результатом, но совершенно не говорит о том, когда именно будет AT> выполнено присваивание. В этом плане также полезно обратить внимание на формулировку в оригинальном стандарте языка С. С одной стороны, в разделе 6.3.16 Assignment operators стандарт языка С говорит: "... An assignment expression has the value of the left operand after the assignment ..." Заметь, что в этой формулировке тоже присутствует слово "after". И в этой формулировке это слово тоже HЕ налагает никаких временнЫх ограничений. Здесь HЕТ требования того, чтобы занесение нового значения в левый операнд делалось до вычисления результата 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" Hа самом деле этого последнего предложения модно было и не добавлять - это утверждение уже делалось в других местах стандарта С. Тем не менее авторы стандарта решили его повторить непосредственно в 6.3.16 для того, чтобы еще раз напомнить, что изменение значения левого операнда оператора присваивания является _побочным_ _эффектом_ этого оператора и момент выполнения этого измененеия (как и любого другого побочного эффекта) точно не определен. Вышеупомянутое слово "after" ничего здесь не меняет. -- Best regards, Андрей. --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/1667999743c8d.html, оценка из 5, голосов 10
|