170 похожих чатов

Всем привет! У меня появилось непонимание того, что происходит с инкрементом,

когда используешь его в присвоении значения той же переменной, с которой его и используешь:
Например,
int a = 2;
Int b = -1;

b = b-- + a++;
Я ожидаю, что b = -1 + 2 = 1, а потом от b отнимется единица. Но на деле b остается равным 1. Почему так? Оператор присвоения “перебивает” декремент?

19 ответов

16 просмотров

Ох блин... Сделай это ОТДЕЛЬНЫМ statement. Ну то есть три оператора сделай

Nick-Semin Автор вопроса
Ilya Zviagin
Ох блин... Сделай это ОТДЕЛЬНЫМ statement. Ну то ...

Да я это использовать не собираюсь, мне просто любопытна сущность этой «ошибки». Компилятор выдал предупреждение

Вообще, это всегда (в с++11) было UB, сейчас может и не UB уже, там многие порядки вычисления операций зафиксировали. Но то, что будет две конкурирующие модификации b это не отменяет.

Nick-Semin Автор вопроса
Ilya Zviagin
Думай, что это — UB

Хорошо, подумаю ещё над этим! Изначально вопрос ко мне пришёл из шарпов, поэтому я удивился, что и плюсы, и Шарпы себя так ведут

Nick-Semin Автор вопроса
Ilya Zviagin
Про шарпы - это не к нам.

Да я понимаю :) В любом случае, спасибо за ответ!

Ilya Zviagin
Вообще, это всегда (в с++11) было UB, сейчас может...

Сейчас не UB (хз, вроде и не было?). Просто оператор присвоения перетрёт изменения постфиксного декремента. Всё равно что b--; b = whatever;

Alexander "Ternvein" Isaev
Сейчас не UB (хз, вроде и не было?). Просто операт...

Всегда это было UB, теперь может быть ( в с++17+) это не UB, а гарантированное перетирание результата инкремента переменной B присваиванием B. Либо гарантированное перетирание результата присваивания в B результатом инкремента B. От этого ничуть не легче или правильнее код стал.

Ilya Zviagin
Всегда это было UB, теперь может быть ( в с++17+) ...

То, что так лучше не делать — полностью согласен. Я про то, что в целом UB было бы, если бы оба операнда сложения меняли b (их порядок был/есть не определён). А порядок сложения и присвоения здесь определён. Т.е. UB это x = b-- + b++;

Alexander "Ternvein" Isaev
То, что так лучше не делать — полностью согласен. ...

Кстати про порядок и не кстати про джаву. Когда у джависта спросил определен ли в джаве порядок вычисления аргументов функции, то он не смог ответить на этот вопрос. То ли не знает, то ли там нет этой особенности как в плюсах...

d7d1cd
Кстати про порядок и не кстати про джаву. Когда у ...

Да, в Java всё очень чётко определено. Причём очень тупо - слева направо. Ну , может там пара исключений есть.

Nick Semin
Хорошо, подумаю ещё над этим! Изначально вопрос к...

Зачем тебе думать над этим? Что полезного от того, если ты докопаешься? Никто такие выражения не пишет, потому что они сложны для понимания. Тебе что, 2 лишних строчки жалко написать?

Nick Semin
Да.

тогда тебе не в С++ надо разбираться, а в себе.

Nick-Semin Автор вопроса
Vladimir Kornev 🇷🇺
тогда тебе не в С++ надо разбираться, а в себе.

Спасибо! Всегда приятно услышать совет от опытного разработчика!

Nick Semin
Спасибо! Всегда приятно услышать совет от опытного...

извини, у меня просто немного наболело по этому поводу.

Nick-Semin Автор вопроса

Похожие вопросы

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
А чем вам питонисты не угодили?😂
.
79
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
Какое виндузовое сообщение приходит TTabSheet, что риэлайняться контролы на нем, даже у которых парент другой? Ситуация: открываю форму - кнопок нет, перелистываю на другой т...
Катерина Свиридова
7
Карта сайта