Здравствуйте, ekamaloff, Вы писали:
ZS>>Вам нравятся эти операторы? И же выведет такой код? И почему? ZS>>
ZS>> int i = 2;
ZS>> i += i--;
ZS>> printf("%d", i);
ZS>>
E>Тут кажись неопределенное поведение — двойная модификация переменной между точками следования. А вообще за такой код руки надо отрывать а не приводить в качестве примера.
Почему неопределённое? Есть чётко прописанный приоритет операторов и порядок их выполнения. Здесь порядок — справа налево: сначала вычисление i, потом уменьшение i на единицу, потом прибавление к новому значению этой переменной её значения старого, перед декрементом. Итого, в результате, получится 3.
А код, да. Не для практики, а из серии задач для олимпиад по информатике.
Здравствуйте, Xander Zerge, Вы писали:
XZ>Почему неопределённое? Есть чётко прописанный приоритет операторов и порядок их выполнения. Здесь порядок — справа налево: сначала вычисление i, потом уменьшение i на единицу, потом прибавление к новому значению этой переменной её значения старого, перед декрементом. Итого, в результате, получится 3.
Я вообще-то не совсем уверен в своей правоте , но советую посмотреть здесь:
F>Причем тут русский? F>Нахрена коммент к коду, который сам себя документирует?
F>Да еще и неправильный коммент?
В том-то и дело! На русском — значит, индус не поймёт. Как сам коммент, так и (естественно) то, что он — неправильный. Поэтому он не поймёт ничего, кроме этого самодокументированного кода, а в нём ошибки-то как раз нет!
Vi2>Здравствуйте, fmiracle, Вы писали:
F>>Да еще и неправильный коммент?
Vi2>Коммент-то как раз правильнй, это код не правильный.
Ну здрасте!
В приведенном фрагменте есть две части — присвоение Х значения -5 и комметарий, что это не присвоение, а уменьшение. Соответственно, любой и них может быть неправильным!
Признаю — в данном тексте код имеет больше шансов оказаться неправильным, но абсолютно точно это ниоткуда не следует
Здравствуйте, Sergei, Вы писали:
S>Здравствуйте, ZevS, Вы писали:
S>++ += и т.п. особенно префиксные иногда полезны (например, для оптимизции), если они работают с пользовательскими объектами (например, string);
Пример такой оптимизации в студию!
PS: я бы 10 (десять) раз подумал прежде чем перегружать какие бы то ни было операторы в пользовательском типе...
Здравствуйте, kan_izh, Вы писали:
_>ZevS wrote:
>> Кстати, почитайте статью Вирта в последнем RSDN-е. Интересная статейка. _>Странная у него там критика. Теоретик он. Не принимает простое правило "если это глупо, но работает, значит это не глупо".
В ходе этой дискуссии почему-то получается так что я говорю об операторах ++ -- , а мне отвечают в том духе что С++ лучше всех. С++ безусловно круче чем VB, Java, весь .NET, Prolog, Lisp и др. вместе взятые. Закрыли тему — глупая она.
По существу, есть у вас что-либо в защиту именно этих операторов?
зыЖ Я уверен более чем на 90% что если вы загляните в свой собственный код, то не увидите эти операторы где-либо, кроме как в заголовке цикла for.
Здравствуйте, ansi, Вы писали:
A>Насколькоя я знаю, в изначальном C (или B) именно так эти операторы и записывались. Так что, все правильно Компилятор у тебя просто слишком новый
А как записывалось присвоение отрицательного значения?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, ZevS, Вы писали:
ZS>Здравствуйте, Sergei, Вы писали:
S>>Здравствуйте, ZevS, Вы писали:
S>>++ += и т.п. особенно префиксные иногда полезны (например, для оптимизции), если они работают с пользовательскими объектами (например, string);
ZS>Пример такой оптимизации в студию!
На самом деле не известно что за объект (какого размера) iterator и делать лишнюю копию незачем(что произошло бы если использовали it=it+1 или it++)...
Re: Детские ошибки
От:
Аноним
Дата:
02.06.06 11:18
Оценка:
Здравствуйте, Аноним, Вы писали:
А>
А> x =- 5; // уменьшаем x на 5
А>
А>Кто видит здесь ошибку без отладчика, поднимите руку.
S>На самом деле не известно что за объект (какого размера) iterator и делать лишнюю копию незачем(что произошло бы если использовали it=it+1 или it++)...
S>>На самом деле не известно что за объект (какого размера) iterator и делать лишнюю копию незачем(что произошло бы если использовали it=it+1 или it++)...
ZS>А чем это лучше чем
ZS>
ZS> it.Increment();
ZS>
Да это выход, но если iterator вдруг станет int, то придется перелапачивать вес код...
Vi2>>Коммент-то как раз правильнй, это код не правильный.
F>Ну здрасте! F>В приведенном фрагменте есть две части — присвоение Х значения -5 и комметарий, что это не присвоение, а уменьшение. Соответственно, любой и них может быть неправильным!
Умникус? Ты сам это разобрал или сначала прочитал все ответы?
F>Признаю — в данном тексте код имеет больше шансов оказаться неправильным, но абсолютно точно это ниоткуда не следует
Это следует из названия темы, в которой расположено письмо.
Невозможно чтобы у всех было всё, так как всех много, а всего мало...