zHz00 Untitled

четверг, 05 марта 2020
23:59 Винтажные грабли
Детскую ошибку совершил:

a=a++;

Сначала было просто а++, потом я сделал a=(a+1)%4; и, наконец, решил вернуть как было, но промахнулся.

Долго думал, почему значение переменной в цилке не меняется. Даже когда увидел ошибку, понял не сразу.

У ++ приоритет меньше, чем у присваивания. Но это постфиксная форма. поэтому значением a++ в выражении будет старое значение a (в данном случае, ноль).

Выражение будет вычисляться следующим образом:
1. В качестве значения a++ берётся старое значение a (ноль).
2. a увеличивается на единицу (1).
3. a получает значение a++, которое равно нулю согласно пункту 1.

Таким образом, значение a дёрнулось, но после окончания вычислений вернулось обратно.

@темы: Программирование, Говнокод

URL
настроение милое такое.. даже не верится, что самый трудн...
Внезапно и некстати закончились инет средства, и мы оказа...
Реальная книга
Маршрутка выезжает с конечной...я сажусь... еще двадцать ...
Тест, губящий во мне человека: - девушка, говорящая при...
сегодня переехала на новое место на работе, когдау уходил...

06.03.2020 в 12:01

06.03.2020 в 12:01
Это undefined behavior, поскольку порядок действий 2 и 3 не определен стандартом. en.wikipedia.org/wiki/Undefined_behavior#Exampl..., en.cppreference.com/w/cpp/language/eval_order.
URL

06.03.2020 в 12:48

06.03.2020 в 12:48
Что думаешь про a+=1?
URL

06.03.2020 в 14:34

06.03.2020 в 14:34
Disprein, воу! Про a++ + ++a знал, а про такое нет. Спасибо.
LizardOfOzz, а что с ним не так? Отношусь хорошо, никогда не использую.
URL

06.03.2020 в 15:54

06.03.2020 в 15:54
zHz00, а я наоборот всегда предпочитал использовать эту форму.
// но это потому что в петоне/рубях/js нет ++ ^_^', а не хочется переключать в голове синтаксисические конструкции.

++ я юзал разве что в for, потому что слишком идиоматично и если я напишу там +=1, то могут возникнуть лишние вопросы.
URL

06.03.2020 в 17:28

06.03.2020 в 17:28
zHz00, вот это с ним не так: «Отношусь хорошо, никогда не использую.» =)
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail