|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Почему-то в одной недавней теме многие писали, что это UB, хотя C++17 постановил, что https://timsong-cpp.github.io/cppwp/n4659/expr.ass#1 The right operand is sequenced before the left operand. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 16:29 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
a.guestC++17 постановил Это слишком свежая новость, мало кто в курсе (включая компиляторы). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 17:07 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЭто слишком свежая новость, мало кто в курсе (включая компиляторы).gcc и clang уже почти 2 года как в курсе. MSVC да, меньше года. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 17:31 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
a.guestgcc и clang уже почти 2 года как в курсе. MSVC да, меньше года.Я тебя разочарую, компиляторы даже утвержденные и "стандартные" положения могут трактовать по своему. Смирись с этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 19:20 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
a.guestПочему-то в одной недавней теме многие писали, что это UB, хотя C++17 постановил, что https://timsong-cpp.github.io/cppwp/n4659/expr.ass#1 The right operand is sequenced before the left operand.если вы про 21809069 , то это проблему не решает, ибо с результататом операторов то как раз всё нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 07:04 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Я замечаю паталогический и девиантный интерес новичков к UB. Вот функциональное программирование в С++ им неинтересно! Им неинтересен ООП с точки зрения идеи. Им неинтересен шаблонный процессинг и вывод типов и неявные преобразования. А вот хлебом не корми - дай поковырять UB... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 15:22 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
mayton, вообще не понимаю - зачем эти извращения? Почему просто не написать?: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 16:20 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
mayton, просто есть дофига контор, которые в качестве задачек подкидывают вот такие фокусы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 17:02 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
А мы можем 1 раз ответить на этот вопрос в FAQ и больше к нему не возвращаться по крайней мере в этом форуме? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 17:10 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
mayton, это же надо потом кому-то в FAQ тыкать, а где, кстати, он в разделе С++? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 17:13 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)mayton, просто есть дофига контор, которые в качестве задачек подкидывают вот такие фокусы ИМХО тут правильный ответ: "Если у вас так можно писать, то не хочу у вас работать" ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 17:39 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Совершенно верно. Правильный ответ - так писать нельзя и данный код не должен проходить code-review. Обсуждать нечего. Впрочем ... иногда подобные вопросы задают по приколу чтоб "осадить не в меру зазанвшегося юнца". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 17:41 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
maytonА мы можем 1 раз ответить на этот вопрос в FAQ и больше к нему не возвращаться по крайней мере в этом форуме? До следующего изменения в стандарте ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 22:24 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
SashaMercurymaytonА мы можем 1 раз ответить на этот вопрос в FAQ и больше к нему не возвращаться по крайней мере в этом форуме? До следующего изменения в стандарте ;) Во всех-всех компилляторах. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 22:27 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
maytonА мы можем 1 раз ответить на этот вопрос в FAQ и больше к нему не возвращаться по крайней мере в этом форуме? можем! а можем? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 11:23 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
a.guestПочему-то в одной недавней теме многие писали, что это UB, хотя C++17 постановил, что https://timsong-cpp.github.io/cppwp/n4659/expr.ass#1 The right operand is sequenced before the left operand. Код: plaintext 1.
Тут проблема-то не в том, что раньше чего вычисляется, а то, что тут есть два побочных эффекта, которые случаются до ; Порядок их обработки не определён. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 12:24 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)a.guestПочему-то в одной недавней теме многие писали, что это UB, хотя C++17 постановил, что пропущено... если вы про 21809069 , то это проблему не решаетПо-моему, вполне решает. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 02:32 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
MasterZivтут есть два побочных эффекта, которые случаются до ; Порядок их обработки не определён.Определён. https://timsong-cpp.github.io/cppwp/n4659/expr.ass#1 The right operand is sequenced before the left operand. https://timsong-cpp.github.io/cppwp/n4659/intro.execution#15 An expression X is said to be sequenced before an expression Y if every value computation and every side effect associated with the expression X is sequenced before every value computation and every side effect associated with the expression Y. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 02:37 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
rdb_devmayton, вообще не понимаю - зачем эти извращения? Почему просто не написать?: Код: plaintext 1.
Потому что результат будет другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 02:59 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
maytonСовершенно верно. Правильный ответ - так писать нельзя и данный код не должен проходить code-review. Обсуждать нечего.Обоснуй "обсуждать нечего" цитатами из https://www.sql.ru/forum/916364/pravila-i-rekomendacii-k-oformleniu-soobshheniy-na-forume-s Где там что-то про code review? Ни слова. Наоборот, написано Форум С++ предназначен для обсуждения широкого круга вопросов связанных с программированием на языках С и С++, обсуждения стандартов языка ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 03:08 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
a.guestMasterZivтут есть два побочных эффекта, которые случаются до ; Порядок их обработки не определён.Определён. https://timsong-cpp.github.io/cppwp/n4659/expr.ass#1 The right operand is sequenced before the left operand. https://timsong-cpp.github.io/cppwp/n4659/intro.execution#15 An expression X is said to be sequenced before an expression Y if every value computation and every side effect associated with the expression X is sequenced before every value computation and every side effect associated with the expression Y.выделенное красным уже ближе к вопросу но вот если его перевести то ох и ах, оно даёт только определение "упорядоченного выражения", иходя из него Код: plaintext 1.
просто не является "упорядоченным выражением" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 08:41 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
a.guest, с функциями более менее понятно: https://timsong-cpp.github.io/cppwp/n4659/intro.execution#18 When calling a function (whether or not the function is inline), every value computation and side effect associated with any argument expression, or with the postfix expression designating the called function, is sequenced before execution of every expression or statement in the body of the called function. и ещё одно мутное https://timsong-cpp.github.io/cppwp/n4659/intro.execution#16 Every value computation and side effect associated with a full-expression is sequenced before every value computation and side effect associated with the next full-expression to be evaluated.т.к. оно опять же не даёт чёткого ответа когда же всё же должны выполняться побочные эффекты конкретно для выражения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 08:55 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
a.guestmaytonСовершенно верно. Правильный ответ - так писать нельзя и данный код не должен проходить code-review. Обсуждать нечего.Обоснуй "обсуждать нечего" цитатами из https://www.sql.ru/forum/916364/pravila-i-rekomendacii-k-oformleniu-soobshheniy-na-forume-s Где там что-то про code review? Ни слова. Наоборот, написано Форум С++ предназначен для обсуждения широкого круга вопросов связанных с программированием на языках С и С++, обсуждения стандартов языка На собеседовании. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 11:19 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
maytonСовершенно верно. Правильный ответ - так писать нельзя и данный код не должен проходить code-review. Обсуждать нечего. Впрочем ... иногда подобные вопросы задают по приколу чтоб "осадить не в меру зазанвшегося юнца". это-то так, но формально: как писать нельзя определяет компилятор, если дает ошибку - нельзя, не дает - можно. В данном случае - ошибки нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 12:34 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Ролг ХупинmaytonСовершенно верно. Правильный ответ - так писать нельзя и данный код не должен проходить code-review. Обсуждать нечего. Впрочем ... иногда подобные вопросы задают по приколу чтоб "осадить не в меру зазанвшегося юнца". это-то так, но формально: как писать нельзя определяет компилятор, если дает ошибку - нельзя, не дает - можно. В данном случае - ошибки нет. Некоторые дают предупреждение 21809886 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 12:42 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Ролг Хупинэто-то так, но формально: как писать нельзя определяет компилятор, если дает ошибку - нельзя, не дает - можно. Вообще-то нет. Стандарт позволяет компилятору игнорировать возможность написания кода идиотами, чтобы дать возможность оптимизировать код нормальных программистов. Это называется undefined behavior и unspecified behavior (UB). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 12:47 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
rdb_devmayton, вообще не понимаю - зачем эти извращения? Почему просто не написать?: Код: plaintext 1.
очевидно это бывшие однострочники perl ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 14:27 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
MasterZiva.guestПочему-то в одной недавней теме многие писали, что это UB, хотя C++17 постановил, что пропущено... Код: plaintext 1.
Тут проблема-то не в том, что раньше чего вычисляется, а то, что тут есть два побочных эффекта, которые случаются до ; Порядок их обработки не определён. а что вообще компилятор должен подумать, когда видит c = -c; ? должно быть c *= -1, например и потом, после c++ может случиться выход из диапазона (превышен INT MAX) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 14:31 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)но вот если его перевести то ох и ах, оно даёт только определение "упорядоченного выражения"Какое ещё "упорядоченное выражение"? Гугл-транслейтом переводили? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 14:40 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Ролг ХупинmaytonСовершенно верно. Правильный ответ - так писать нельзя и данный код не должен проходить code-review. Обсуждать нечего. Впрочем ... иногда подобные вопросы задают по приколу чтоб "осадить не в меру зазанвшегося юнца". это-то так, но формально: как писать нельзя определяет компилятор, если дает ошибку - нельзя, не дает - можно. В данном случае - ошибки нет. Дело в том что С++ оставил за собой свойства портабельного ассемблера. Грубо говоря он очень многое позволяет написать. И ответственность за результат берет на себя разработчик. Он этим как-бы говорит - я ЗНАЮ что я делаю. И заткнитесь все. Но при этом мы все понимаем что такой либерализм имеет последствия. И junior на собеседовании может выбрать 2 линии поведения. Первое - он просто скажет что стандарт определяет это как UB. И так писать не рекомендуется. Или он может "упереться рогом" и вступить в безнадёжный спор о том что в его компилляторе ДОМА всё нормально работает. Или еще бох знает какой вариант... И именно поэтому в данном форуме я считаю споры об UB бесполезной тратой времени и вашего сетевого трафика. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 14:45 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
у меня кстати без ошибок работает Код: plaintext 1. 2.
-5 gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) и "c = -c" тоже ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:09 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
хотя нет, он делает 5+1, а потом -1 хотя ожидалось -6 чем не UB ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:10 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
полудуххотя ожидалось -6 Кем ожидалось? Результат операции (5++) это 5, без вариантов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:12 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
полудуххотя ожидалось -6С чего это? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:12 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:14 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovКем ожидалось? Результат операции (5++) это 5, без вариантов. Код: plaintext 1. 2. 3.
v++ ведь становится 6 почему он справа от = не становится 6 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:21 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
полудухDimitry SibiryakovКем ожидалось? Результат операции (5++) это 5, без вариантов. Код: plaintext 1. 2. 3.
v++ ведь становится 6 почему он справа от = не становится 6 ?Становится. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:27 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
полудухDimitry SibiryakovКем ожидалось? Результат операции (5++) это 5, без вариантов. Код: plaintext 1. 2. 3.
v++ ведь становится 6 почему он справа от = не становится 6 ? Маленькая ремарка. В МОМЕНТ использования v в expression он ЕЩЕ равен 5. И после выхода из expression делается пост-инкремент. Потому он и называется пост. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:32 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
maytonМаленькая ремарка. В МОМЕНТ использования v в expression он ЕЩЕ равен 5. И после выхода из expression делается пост-инкремент. Потому он и называется пост. лучшее определение для выражения UNDEFINED BEHAVIOUR ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:35 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
полудухv++ ведь становится 6 Нет. Научись отличать результат операции от её побочного эффекта. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 17:14 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovполудухv++ ведь становится 6 Нет. Научись отличать результат операции от её побочного эффекта. шта? потрудитесь выражаться конкретнее ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 17:28 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
полудухmaytonМаленькая ремарка. В МОМЕНТ использования v в expression он ЕЩЕ равен 5. И после выхода из expression делается пост-инкремент. Потому он и называется пост. лучшее определение для выражения UNDEFINED BEHAVIOUR Это не UB. Это нормальное поведение кода. UB начинается когда вы миксуете несколько выражений справа от знака равно и когда переменная появляется слева от знака равно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 17:44 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
полудухшта? Какое слово тебе непонятно? Результатом постфиксного инкремента является изначальное значение переменной. Точка. Это явно написано в стандарте. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 17:47 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
непонятно откуда взялся "побочный эффект", если maytonЭто нормальное поведение кода. +1 чтоли там "побочный эффект"? Dimitry SibiryakovРезультатом постфиксного инкремента является изначальное значение переменной. Точка. Это явно написано в стандарте. т.е. переменная вообще не изменяется. учитывая, что само слово "инкремент" означает +1, что-то тут не сходится... правильнее звучит, что инкремент состоит из двух составляющих: "+1" и "использование в выражении". но ни один из них не является "побочным" авторГлавное различие между ними, что при использовании операции преинкремента значение переменной сначала увеличивается на 1, а затем используется в выражении, к которому относится данная переменная. А при использовании операции постинкремента значение переменной сначала используется в выражении, а потом увеличивается на 1. уж простите моё занудство, но раз уж мы тут до запятых решили разобраться ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 18:11 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
полудух+1 чтоли там "побочный эффект"? Да. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 18:15 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)a.guestпропущено... Какое ещё "упорядоченное выражение"? Гугл-транслейтом переводили?блесни познаниями как ещё транслейтнуть is said to be Т.е. ты переводишь An expression X is said to be sequenced before an expression Y… как Выражение X называют упорядоченным ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 19:42 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
О чем вы спорите? Вернитесь в русло топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 19:48 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
a.guest, авторпару X,Y называют упорядоченной если каждое вычисление значения и каждый побочный эффект, связанный с выражением X, упорядочивается перед каждым вычислением значения и каждым побочным эффектом, связанным с выражением Y. если смысл переводить с учётом предложений до этого авторGiven any two evaluations A and B, if A is sequenced before B (or, equivalently, B is sequenced after A), then the execution of A shall precede the execution of B. Evaluations A and B are indeterminately sequenced when either A is sequenced before B or B is sequenced before A, but it is unspecified which. и гугл вполне осиливает, я всё равно термин на русский не подберу (может "выстраивается", если уж речь о компиляторе) гуглПри любых двух оценках A и B, если A упорядочен до B (или, что то же самое, B упорядочен после A), тогда выполнение A должно предшествовать выполнению B. Оценки A и B являются неопределенно упорядоченными , когда либо A упорядочивается перед B, либо B упорядочивается перед A, но не указано, какие именно. т.е. по факту весь этот блок это масло-масленное ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 20:11 |
|
Что неопределённого в `c = -(c++);`?
|
|||
---|---|---|---|
#18+
kealon(Ruslan), и в чём проблема с `i = i++`, раз ты оказывается более-менее осилил перевод? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 20:21 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017657]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
others: | 296ms |
total: | 444ms |
0 / 0 |