Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, надеюсь что этот кейс настолько редкий чтобы не ощущать damage на уровне статистики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:05 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyС точки зрения выполнения, присвоение - это вызов функции с двумя аргументами. В каком порядке вычислять аргументы - не имеет значения, главное чтобы все аргументы были готовы на момент вызова.Тогда, единственным логичным выбором остаётся "неопределённое поведение". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:05 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovAnatoly MoskovskyТогда, единственным логичным выбором остаётся "неопределённое поведение". Это было бы так если бы устранение UB вносило бы оверхед. Но по факту легко задать определенное поведение для случая присвоения не внося оверхед. А значит это надо сделать. Потому что как я выше писал встречаются нетривиальные и вполне непротиворечивые варианты этого кейса, и наказывать программиста за непреднамеренное применение - бессмысленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:11 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovegorychпорядок вычисления аргументов функции не определён, жеж, а тут получается, что мы взяли, и сказали, что вот именно для оператора присваивания - определён. нехорошо как то, имхо )) Ещё со времён K&R оператор присваивания вычисляется справа налево. PS: Порядок вычисления аргументов функции определяется соглашением о вызове. это неправда. две неправды. = выполняется справа налево, а не вычисляется. параметры передаются в определенном порядке, а не вычисляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:47 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovegorychв С операторы - не функции, K&R не имеют отношения к C++, не видишь не стыковки? )) Операторы возвращают значение? Возвращают. Значит - функции. Дима! Ну ты же грамотный человек, зачем такую хрень пишешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:49 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Я сам за Undefined. Так прямо Гербу и отписал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:53 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНапример убрать тернарный оператор, чтобы SashaMercury не злоупотрелбял им не, я тоже люблю тернарный оператор, святое не трожь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 20:59 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВ таком случае надо запретить много чего, чтоб стиль не портить.я бы C-style каст бы запретил бы уже )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 21:01 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЭто было бы так если бы устранение UB вносило бы оверхед. Но по факту легко задать определенное поведение для случая присвоения не внося оверхед. А значит это надо сделать.Устранить неопределённость, значит разрешить использование.Потому что как я выше писал встречаются нетривиальные и вполне непротиворечивые варианты этого кейса, и наказывать программиста за непреднамеренное применение - бессмысленно.Неправда. Если я создал "псевдоним", то на меня же ложиться и ответственность за "множественное использование". "Сложно отследить" - не оправдание. Это жестко и не совсем практично, но именно такой подход является единственно правильным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 21:34 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Посчему здесь UB? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 21:36 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyК сожалению, в реальных программах этот кейс встречается в основном в неявном виде, типа этого. Код: plaintext 1. 2. Отследить алиасинг не всегда возможно.Толку убирать UB, если простое переписывание "подозрительного" кода на "определённый": Код: sql 1. 2. 3. 4. ставит нас на грабли? Может просто не использовать замысловатые инкременты для переменных "вне подконтрольной области"? Тем более, что если уж бороться за эффективность, то постинкремент должен быть предан анафеме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 21:54 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovТолку убирать UB, если простое переписывание "подозрительного" кода на "определённый" Толк в том чтобы помочь программисту, а не мешать. Когда есть код с такой проблемой то это почти наверняка баг. И разрешать каждой платформе по разному выполнять этот код - это затрудняет поиск бага. Хотя ничего не мешает именно в данном конкретном случае задать определенное поведение (любое). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 00:01 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyТолк в том чтобы помочь программисту, а не мешатьПрограммирование всё больше и больше становится производством кода. На любом производстве есть правила техники безопасности, которые могут мешать и мешают эффективному производству. В данном конкретном случае я бы сформулировал примерно так: "более одного выражения с побочным эффектом в одном операторе - неопределённое поведение". Да, можно тем или иным способом доопределить поведение компилятора, но "потрудитесь излагать яснее, кто на ком стоял". Нет проблемы превратить невнятное: Код: sql 1. 2. 3. в более определённое: Код: sql 1. или в любой другой из, возможно подразумевавшихся, вариантов: Код: sql 1. Ни пальцы не сотрутся, ни ум за разум не зайдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 04:23 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
AlcaПосчему здесь UB? По современному стандарту модификация одной и той же переменной более одного раза до точки следования является UB. Кажется, так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 10:52 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyBasil A. SidorovТолку убирать UB, если простое переписывание "подозрительного" кода на "определённый" Толк в том чтобы помочь программисту, а не мешать. Когда есть код с такой проблемой то это почти наверняка баг. И разрешать каждой платформе по разному выполнять этот код - это затрудняет поиск бага. Хотя ничего не мешает именно в данном конкретном случае задать определенное поведение (любое). Я лично резко против такого подхода. В приведённом в оригинальном посте примере написан код, которого вообще не должно быть в нормальной программе. В чём преимущество написать этот код именно так ? НИ В ЧЁМ, это просто дешёвые понты старого С-шника. Типа -- а и вот так заверну. Так что UB. Там кстати в оригинальном посте даже картинку запостили: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 10:56 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov....в более определённое: Код: sql 1. 2. Ни пальцы не сотрутся, ни ум за разум не зайдёт. У кого как. У меня заходит. ВикипедияIn the C and C++ programming languages, the comma operator (represented by the token ,) is a binary operator that evaluates its first operand and discards the result, and then evaluates the second operand and returns this value (and type). в чем сакральный смысл записи "i,i++" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 10:59 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevBasil A. Sidorov....в более определённое: Код: sql 1. 2. Ни пальцы не сотрутся, ни ум за разум не зайдёт. У кого как. У меня заходит. ВикипедияIn the C and C++ programming languages, the comma operator (represented by the token ,) is a binary operator that evaluates its first operand and discards the result, and then evaluates the second operand and returns this value (and type). в чем сакральный смысл записи "i,i++" ? Тут -- ни в чём. Можно заменить на ' ; ' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 11:04 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
А мне показалось смысл в том, что бы "взорвать мозг". Вообще, мне кажется, весь топик этому посвящен. Какой-то топик для брюнеток, которые хотят уметь "взрывать мозг" как блондинки (блондинки это с рождения умеют). Только не понятно, при чем тут C и компилятор. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 11:40 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Автор пишет: авторMy question is not what it might print under today’s C++ rules. The third line runs afoul of two different categories of undefined and unspecified behavior. Rather, my question is what you would like the result to be. Please let me know. Поправьте меня в моём английском если что. Но он спрашивает - "Какой-бы результат вам хотелось-бы получить на выходе?" Это философия. Дискурс. Мозговой штурм. Сбор мнений соц-опрос. Так я думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 12:10 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
MasterZivAlcaПосчему здесь UB? По современному стандарту модификация одной и той же переменной более одного раза до точки следования является UB. Кажется, так. Кстати, а можно как-то настроить msvc, gcc или clang отлавливать такие warning-и, чтобы компиляция дальше не проходила? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 13:37 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovТем более, что если уж бороться за эффективность, то постинкремент должен быть предан анафеме А почему бы действительно не отказаться от постинкремента, есть ли вообще случаи когда без него не обойтись или он заметно что-то облегчает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 13:38 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
MasterZivВ приведённом в оригинальном посте примере написан код, которого вообще не должно быть в нормальной программе. В чём преимущество написать этот код именно так ? НИ В ЧЁМ, это просто дешёвые понты старого С-шника. Типа -- а и вот так заверну. В оригинальном посте показан минимальный пример демонстрирующий проблему в явном виде. В реальных программах проблема не так очевидна. Например, недавно тут обсуждался код, против которого ни у кого не возникало никаких возражений: Код: plaintext 1. Но тут возможна та же самая проблема, если str1 является ссылкой на str2, потому что данный код эквивалентен такому: Код: plaintext 1. 2. Это баг, что нет проверки на равенство, но из-за UB его можете не сразу заметить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 13:49 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Например, недавно тут обсуждался код, против которого ни у кого не возникало никаких возражений: Код: plaintext 1. Не надо преувеличивать. Часто ты используешь ссылки на указатели ? Да ещё чтобы писать в них можно было ... Вообще, это код из С, там ссылок нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:05 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Но тут возможна та же самая проблема, если str1 является ссылкой на str2, потому что данный код эквивалентен такому: Код: plaintext 1. 2. Это баг, что нет проверки на равенство, но из-за UB его можете не сразу заметить. Да, и где тут UB ? Его тут нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:06 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
MasterZivДа, и где тут UB ? Его тут нет. Учите матчасть :) MasterZivНе надо преувеличивать. Часто ты используешь ссылки на указатели ? Не вижу смысла спорить. Сейчас в коде нет ссылок, а потом пришел другой программист и добавил ссылки. И приплыли. Баги будут всегда. Вне зависимости от вашего желания и доброй воли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:21 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38823628&tid=2018480]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 199ms |

| 0 / 0 |
