| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > cout<<(++i)++ "Точки следования и приоритеты" |
| Автор: EgoBrain 24.2.2012, 04:38 | ||||
| Всем привет. Уже ни раз обсуждалось и множество статей разжевано, но к "заколдованным" местам спецификации С++ и Си приходится возвращаться вновь и вновь. Есть вещи, понимание которых приходит с трудом, да и логика стандарта весьма запутана местами.. И так, речь идет о таких темах как "Точки следования" и "Неуточненное либо Неопределенное поведение". Вот конкретный пример:
Я использую компилятор (так понимаю от версии зависит результат), входящий в соства VS 2010, получается вывод:
Почему? Предполагаю что оператор (функция) cout может выводить все значения изменяемой переменной до точки следования (если переменная изменялась больше одного раза), но вот почему второй результат 8? Требуется разъяснение на пальцах. |
| Автор: boostcoder 24.2.2012, 05:25 | ||||
возможно, так станет понятней:
http://liveworkspace.org/code/e9c5b24bccb9fe56655bd87890456f7b вывод:
и обратите внимание на предупреждение компилятора. |
| Автор: feodorv 24.2.2012, 05:33 | ||||||
А что здесь такого? Было 6, сделано i++, потом ++i, получилось 8. Ну, в данном примере не такое уж неопределённое:
Первый шаг:
Второй шаг:
|
| Автор: EgoBrain 24.2.2012, 05:33 |
| А операция помещения в поток вывода << является точкой следования? Добавлено через 4 минуты и 34 секунды Блин, грубая невнимательность, заострив внимание на (++i)++ забыл про цикл.. |
| Автор: volatile 24.2.2012, 23:52 | ||||
Имхо, в данном коде никакого UB нет.
А вот здесь явно UB, поскольку здесь вторая i Операция помещения в поток не является точкой следования. |
| Автор: boostcoder 25.2.2012, 03:54 |
таки верно! |