|
Что неопределённого в `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?fid=57&gotonew=1&tid=2017657]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
124ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 268ms |
total: | 501ms |
0 / 0 |