|
|
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. вот такой код: Код: plaintext 1. 2. Кстати, если уж необходимо гарантированное однократное увеличение, то можно и так написать: Код: plaintext 1. 2. 3. 4. Вобщем то понятно, подобные примеры - это road to hell. Мнения ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 09:39 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Так а вопрос то в чём? Всё правильно, всё работает. Если у кого то труднос пониманием таких конструкций пусть их не использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:02 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
x_0040h x> Так а вопрос то в чём? Всё правильно, всё работает. Если у x> кого то труднос пониманием таких конструкций пусть их не x> используетИнтересуют мнения - соответствует такое поведения компилятора стандарту или нет. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:08 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Карабас Барабасвот такой код: Код: plaintext 1. 2. 5/4 "... behavior is undefined" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:20 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас x_0040h x> Так а вопрос то в чём? Всё правильно, всё работает. Если у x> кого то труднос пониманием таких конструкций пусть их не x> используетИнтересуют мнения - соответствует такое поведения компилятора стандарту или нет. Posted via ActualForum NNTP Server 1.3 Какой компилятор используешь? У меня все имеющиеся в распоряжении gcc в обоих случаях 6 выдали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:27 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
ZrenBy 5/4 "... behavior is undefined" Опредил =) Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual expressions, and the order in which side effects take place, is unspecified. Between the previous and next sequence point a scalar object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored. The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full expression; otherwise the behavior is undefined. [Example: i = v[i++]; // the behavior is undefined i = 7, i++, i++; // ‘i’ becomes 9 i = ++i + 1; // the behavior is undefined i = i + 1; // the value of ’i’ is incremented —end example] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:27 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
v6yКакой компилятор используешь?C++Builder 5.0 Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:32 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
x_0040h ZrenBy 5/4 "... behavior is undefined" Опредил =) Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual expressions, and the order in which side effects take place, is unspecified. Between the previous and next sequence point a scalar object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored. The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full expression; otherwise the behavior is undefined. [Example: i = v[i++]; // the behavior is undefined i = 7, i++, i++; // ‘i’ becomes 9 i = ++i + 1; // the behavior is undefined i = i + 1; // the value of ’i’ is incremented —end example] То что в зависимости от компилятора будет разный результат и ежу понятно. Но поскольку такие конструкции не запрещены, то вопрос о неком стандарте по вычислению подобных выражений имеет право быть, ИМХО. 2Карабас Барабас Скорее всего зависит от способа получения/вычисления дерева выражений того или иного компилятора. Лично мне понятен случай когда в обоих примерах получаем 6. А вот почему второй пример у тебя возвращает 5... Может x_0040h объяснит? ;-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:47 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
v6yА вот почему второй пример у тебя возвращает 5Меня это тоже озадачило :) Ассемблерный код совершенно другой генерится. кстати, вот такой код: Код: plaintext 1. 2. 3. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:53 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Предлагаю Вам господа выложить сюда ассемблерный код, который генерирует ваш компилятор, потому как мой при любых вариантах кода представленных здесь выдаёт 6 (MSVS 2005(восьмёрка)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 11:14 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
x_0040h x> Предлагаю Вам господа выложить сюда ассемблерный код, x> который генерирует ваш компилятор, потому как мой при x> любых вариантах кода представленных здесь выдаёт 6 (MSVS x> 2005(восьмёрка)) C++Builder 5.0: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 11:22 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Карабас БарабасC++Builder 5.0То же, но после включения оптимизации: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 11:35 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
gcc manProblems often result from expressions with two increment operators, as in f (*p++, *p++). Your previous compiler might have interpreted that expression the way you intended; GCC might interpret it another way. Neither compiler is wrong. The bug is in your code. Код: plaintext 1. 2. 3. 4. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 13:07 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
manThe C and C++ standards have the notion of "sequence points". Everything that happens between two sequence points happens in an unspecified order, but it has to happen after the first and before the second sequence point. The end of a statement and a function call are examples for sequence points, whereas assignments and the comma between function arguments are not. http://gcc.gnu.org/bugs.html#nonbugs_c ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 13:49 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
http://publications.gbdirect.co.uk/c_book/chapter8/sequence_points.html ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 13:56 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
a=(++a)+(++a); так что стандарт говорит, что может быть всё что угодно, но на моё имхо должно быть 5 :) ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 14:02 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Результат по стандарту не определен. Компилироваться такой код обязан без ошибок. Как он будет работать стандарт не оговаривает. Это все насколько я знаю. Т.е. такое поведение компилятора полностью соответствует стандарту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 14:17 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Это, а объясните, как там 6-то может получиться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 14:24 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
MasterZivкак там 6-то может получиться ?лихко: 3+3=6 Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 14:29 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто, а объясните, как там 6-то может получиться ? ИМХО 6 там просто обязано получится. Возьмём например a=(++a)+(++a); //скобки кстати можно убрать, инкремент приоритетней. Сначала срабатывает левый инкремент "а", и "а" становится равным 2. Потом срабатывет правый инкремент и "а" становится равным 3. Потом "а" складывается с "а" 3+3=6. Мне кажется всё логично с точи зрения компилятора, если рассматривать "а" как ячейку памяти значение в которой дважы инкрементируется и складывается само с собой. В конечном итоге мы же складываем значения в памяти, а не какие то абстрактные понятия. ИМХО логика borland-овского компилятора, который сохраняет результат выполения левого инкремента во временное хранилище не верна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 15:04 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
x_0040hИМХО логика borland-овского компилятора, который сохраняет результат выполения левого инкремента во временное хранилище не вернаНичгео он не сохраняет, у меня в этом примере получилось 6. 5 получилось в других примерах: со ссылками и с присваиванием Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 15:06 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял Карабаса Барабаса, то его интересует как, по мнению форумчан, должны вычисляться подобные выражения. И если я понял его правильно, то тогда я не понял чего народ тут усиленно толкует о том что дважды два четыре (результат по стандарту не определен бла-бла-бла) Я тут по-медитировал, и тоже пришел к мнению, что Код: plaintext 1. 2. В что-то типа польской записи: (PREINCa)(PREINCa)+ PREINCa=2 PREINCa=3 2+3=5 И код генерировать соответсвующий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 15:16 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
x_0040hИМХО 6 там просто обязано получится.м-да? А если а - объект пользовательского класса с переодределёнными операторами + и ++ ? а скомпиль такую штуку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 15:17 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас x_0040hИМХО логика borland-овского компилятора, который сохраняет результат выполения левого инкремента во временное хранилище не вернаНичгео он не сохраняет, у меня в этом примере получилось 6. 5 получилось в других примерах: со ссылками и с присваиванием Posted via ActualForum NNTP Server 1.3 Видимо я вас неправильно понял. Но и код со ссылками в MSVS выдаёт 6. Лично я считаю такой резуьтат верным и ожидаемым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 15:20 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
maXmo x_0040hИМХО 6 там просто обязано получится.м-да? А если а - объект пользовательского класса с переодределёнными операторами + и ++ ? а скомпиль такую штуку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А скомпиль такую штуку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Наверное это всё таки пустой спор из разряда Linux vs Wndows, хотя всё таки можешь попробовать меня переубедить(если не жалко рабочего времени - читай денег работодателя), что надо возвращать экземпляр а не ссылку при перегрузке оператора инкремента. PS: кстати на собеседованиях иногда спрашивают такого рода вопросы, но форма обычно "что быдет, если вызвать f(++p,++p); и что будет если f(++p,p++);" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 16:30 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
эээ... ссылку надо возвращать, чтобы корректно отработал inc(inc(a)). inline int &inc(int &i) { i++; return i; } и уж совсем к вящей славе страуструпа можно объявить volatile int a; ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 16:59 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
maXmoэээ... ссылку надо возвращать, чтобы корректно отработал inc(inc(a)). inline int &inc(int &i) { i++; return i; } и уж совсем к вящей славе страуструпа можно объявить volatile int a; ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm => 6 =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 17:14 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
всё с ним ясно :-| ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 19:57 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
v6y v> Если я правильно понял Карабаса Барабаса, то его v> интересует как, по мнению форумчан, должны вычисляться v> подобные выраженияПоразмыслив, пришел к выводу, что это как раз тот случай, когда прав компилятор, как бы он ни вычислял те выражения. Так что надо просто знать, как конкретно ваш компилятор правильно делает и учитывать особенности правильности именно вашего компилятора :) PS: шутки типа "в военное время значение синуса может достигать 4" перестают быть шутками - одна и та же программа, скомпиленная на разных компиляторах, выдаст совершенно разные значения при вычислении простейшего выражения. А что делать, написано "мины" - не ходи ! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 06:56 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
А зачем тебе такое выражение понадобилось? Это же изврат. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 16:22 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
v6yЕсли я правильно понял Карабаса Барабаса, то его интересует как, по мнению форумчан, должны вычисляться подобные выражения. И если я понял его правильно, то тогда я не понял чего народ тут усиленно толкует о том что дважды два четыре (результат по стандарту не определен бла-бла-бла) Я тут по-медитировал, и тоже пришел к мнению, что Код: plaintext 1. 2. В что-то типа польской записи: (PREINCa)(PREINCa)+ PREINCa=2 PREINCa=3 2+3=5 И код генерировать соответсвующий. Это было бы логично для паралельных вычислений/языков прграммирования и то в случае специального указания. По моему мнению данная конструкция не подлежит распаралеливанию. Это пример классического последовательного вычисления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2007, 14:00 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Стандарт стандартом, но на мой взгляд ВПОЛНЕ логично вычислить операнды перед выполнением операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 09:01 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
т.е. перед сложением дважды выполнить инкремент и не парить мозк с сохранением "промежуточных" значений операндов как это делает C#. Если кто-то написал подобный код, он должен отдавать себе отчет в том к каким последствиям сие приведет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 09:05 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)т.е. перед сложением дважды выполнить инкремент я вот сейчас подумал, что если выполнить вот такое: func(++i,++i); то может оказаться ..... проверил - точно, функция будет вызвана так: func(2,3); т.е. в разных вариантах "применения" одна и та же бяка вылезет разными боками, что не есть хорошо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 09:23 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Ну тебе же сказали поведение не определено. Ты вот сам встань на место человека пишушего компилятор, вот что он сделает - возьмет первый параметр, инкрементирует, засунет в стек, возьмет второй - опять инкрементирует, засунет в стек. Что еще проверять его семантику? А всегда ли это возможно? может быть у тебя в качестве параметра выступает функция, имеющая "побочные эффекта", ну например изменяющая последующие параметры, да и находится она в другом модуле компиляции и что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 09:44 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Карабас Барабася вот сейчас подумал, что если выполнить вот такое: func(++i,++i); то может оказаться ..... проверил - точно, функция будет вызвана так: func(2,3); т.е. в разных вариантах "применения" одна и та же бяка вылезет разными боками, что не есть хорошо Очень даже хорошо. Последовательное вычесление параметров функции. Другой вопрос - в каком порядке они вычисляются. Если порядок точно известен (и не изменится), то без боязни можно использовать такую запись, а если не уверен, то не рискуй. Об этом и предупреждает Саттер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:04 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Akh ты абсолютно неправ. А что будет ежели сменить компилятор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:09 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
blindedAkh ты абсолютно неправ. А что будет ежели сменить компилятор? Не спеши с таким утверждением. Порядок вычисления аргументов фунций С++ строго регламентируется. Для этого существует спецификатор функции. И не стоит бояться того, что сначала выполниться два инкеремента, а потом вычисляться парметры. Этого не будет никогда. Более того, даже у такого стандартного оператора как "," порядок тоже строго регламентирован. Правда только стандратного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:17 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Ребята хорош умничать... Результат таких операций не определен - это всем прекрасно известно. Тут речь идет об том, как было бы правильнее это дело стандартизировать (гипотетически). ----------------------- Объективная реальность – бред, вызванный недостатком алкоголя в крови ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:24 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
blindedНу тебе же сказали поведение не определенокак раз это и обсуждаем blindedвстань на место человека пишушего компиляторвот потому-то как раз я и думаю, что изменение неопределенного поведения в сторону определенного - это хорошо. А если i - это не int, а TMySuperPuperClass ? Тогда даже одна и та же запись (++i)+(++i) будет работать по-разному для разных типов i. Это нехорошо. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:28 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
v6yРебята хорош умничать... Результат таких операций не определен - это всем прекрасно известно. Тут речь идет об том, как было бы правильнее это дело стандартизировать (гипотетически). ----------------------- Объективная реальность – бред, вызванный недостатком алкоголя в крови Это разные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:32 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Akh Это разные вещи. Одинаковые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:35 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
v6y Akh Это разные вещи. Одинаковые. Ну, раз ты ничего не знаешь про оператор ",", то что лезешь в обсуждение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:44 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
v6yРебята хорош умничать... Результат таких операций не определен - это всем прекрасно известно. Тут речь идет об том, как было бы правильнее это дело стандартизировать (гипотетически). Умные парни из комитета уже о всем подумали. Ответ - НИКАК. Т.е. так, как сейчас есть в стандарте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 10:59 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Akh v6y Akh Это разные вещи. Одинаковые. Ну, раз ты ничего не знаешь про оператор ",", то что лезешь в обсуждение? Причем здесь оператор "," если речь идет о порядке вычисления префиксного оператора "++" ? P.S. Тебя забыл спросить куда мне лезть, а куда не лезть, салага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 11:44 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
v6y Akh v6y Akh Это разные вещи. Одинаковые. Ну, раз ты ничего не знаешь про оператор ",", то что лезешь в обсуждение? Причем здесь оператор "," если речь идет о порядке вычисления префиксного оператора "++" ? P.S. Тебя забыл спросить куда мне лезть, а куда не лезть, салага. При том, что пять предыдущих сообщений велись на другую тему. Если ты оставил комментарий не к текущему разговору, то будь добр отмечать это, а не флудить и оскорблять участников конференции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 11:54 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Akh Причем здесь оператор "," если речь идет о порядке вычисления префиксного оператора "++" ? При том, что пять предыдущих сообщений велись на другую тему. А еще где-то 30-35 предыдущих на эту? (риторический вопрос) Если ты оставил комментарий не к текущему разговору, то будь добр отмечать это, а не флудить и оскорблять участников конференции. Что ж, каждый видит обсуждение немного по своему. С моей точки зрения никаких оскорблений и флуда не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 12:57 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Карабас Барабаспрефиксный оператор ++ выполняется ДО ИСПОЛЬЗОВАНИЯ переменной, это можно понимать и как ДО ВЫЧИСЛЕНИЯ ВСЕГО ВЫРАЖЕНИЯ, а раз переменная используется в выражении и есть префиксная операция с ней (++), то переменная должна быть увеличена. Несколько неправильная трактовка происходящего. правильней звучало бы так: операции постфиксного и префиксного инкремента имеют приоритет более высокий чем операции + и =, поэтому они вычисляются первыми.. А разница в работе постфиксного и префиксного инкремента заключается лишь в том, что префиксная операция увеличивает значение на 1 у объекта и возвращает полученное значение, а постфиксная увеличивает значение на 1 у объекта, а возвращает значение хранивщееся в обьете до увелечения. Карабас Барабас Код: plaintext 1. 2. 3. 4. Мнения ? должно выдавать 6, как и в первом варианте, но в Builder-ре действительно даёт 5, опираясь на приорететы операций, я лично считаю этот результат неправильным и неожиданным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 16:32 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
батраквот и стандартописатели тоже поломали голову, поломали ... да и решили: "а пох, будет андефинид бехавиор, а кому не нравится, пускай на паскале пишут или на бейсике" Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 16:57 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Карабас Барабасвот и стандартописатели тоже поломали голову, поломали ... да и решили: "а пох, будет андефинид бехавиор, Думаю, не совсем так. Думаю, этот андефинед бихавиор - прямое следствие того факта, что к моменту создания стандарта существовали популярные компиляторы, использовавшие как тот, так и иной вариант. Ну а дальше - известная песня "в целях совместимости и чтоб никого не обидеть". Давно не заглядывал, но по моим воспоминаниям, в стандарте даже не было оговорки о том, что компилятор обязан считать такие вещи "всегда одинаково". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 18:27 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
Этот undefined behavor еще с С тянется.Что думаешь не могли ничего придумать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 20:30 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
blindedЭтот undefined behavor еще с С тянется. Именно что. Еще с первой попытки написать стандарт Си при наличии кучи компиляторов. blindedЧто думаешь не могли ничего придумать? А что там можно придумать? И так, и эдак задница. И как водится у нас, выбрали решение, которое хуже в долговременной перспективе, но при этом неконфликтно здесь и сейчас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 20:36 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
softwarer А что там можно придумать? И так, и эдак задница. Правильно поэтому взяли и написали ЗАДНИЦА открытым текстом. А мы тут уже пять страниц написали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 21:01 |
|
||
|
Префиксные операции и стандарт
|
|||
|---|---|---|---|
|
#18+
softwarer Карабас Барабасвот и стандартописатели тоже поломали голову, поломали ... да и решили: "а пох, будет андефинид бехавиор, Думаю, не совсем так. Думаю, этот андефинед бихавиор - прямое следствие того факта, что к моменту создания стандарта существовали популярные компиляторы, использовавшие как тот, так и иной вариант. Ну а дальше - известная песня "в целях совместимости и чтоб никого не обидеть". ... Да, ну. Каждая новая версия кого-то обижает. Появляются новые версии компиляторов, которые подтачиваются под новые версии. Да, и на самом деле, никто и обижаться не имеет права. Компиляторы пишуться под определеную версию стандарта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 09:41 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2028877]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 557ms |

| 0 / 0 |
