Попробовал в Dev C++ |
Вопросы и ответы |
Поиск
Кирилл Букаев | Репутация: 121 (Кандидат)
20 мая 2009 в 15:41
Тема: Программирование
Федор Бурдун | Репутация: 100 (Кандидат)
1 мая 2009 в 00:23
Тема: Программирование
Виктор Васильев | Репутация: 101 (Кандидат)
14 апреля 2009 в 15:53
Тема: Программирование
Тихон Тагунов | Репутация: 104 (Кандидат)
11 апреля 2009 в 12:45
Тема: Программирование
Андрей Ким | Репутация: 99 (Без статуса)
1 апреля 2009 в 15:34
Тема: Программирование
Ростислав Дёмин | Репутация: 104 (Кандидат)
31 марта 2009 в 13:15
Тема: Программирование
Айдархан Каимов | Репутация: 100 (Кандидат)
25 февраля 2009 в 20:49
Тема: Программирование
User User | Репутация: 123 (Кандидат)
28 января 2009 в 00:25
Тема: Интернет-технологии
Виктор Ряников | Репутация: 104 (Кандидат)
25 января 2009 в 16:44
Тема: Интернет-технологии
Максим Емельянов | Репутация: 103 (Кандидат)
26 ноября 2008 в 12:08
Тема: Программирование
Шуламит Короб | Репутация: 100 (Кандидат)
23 ноября 2008 в 11:35
Тема: Программирование
User User | Репутация: 123 (Кандидат)
21 ноября 2008 в 09:57
Тема: Интернет-технологии
Константин Иванов | Репутация: 608 (Специалист)
16 ноября 2008 в 08:37
Тема: Интернет-технологии
Кирилл Чабан | Репутация: 103 (Кандидат)
14 октября 2008 в 19:38
Тема: Программирование
Valerijus Stachovskis | Репутация: 133 (Кандидат)
23 августа 2008 в 13:10
Тема: Интернет-технологии
Роман Белоус | Репутация: 140 (Кандидат)
28 июля 2008 в 11:47
Тема: Программирование
Олег Тузов | Репутация: 122 (Кандидат)
8 июля 2008 в 01:45
Тема: Интернет-технологии
Владимир Олейник | Репутация: 105 (Кандидат)
4 июля 2008 в 11:32
Тема: Программирование
speianaurel
Я тоже только что проверил. На новом линуксовском g++ для первого примера получилось «656», для второго — «7675». Впрочем, второй пример ещё более некорректен, там всё зависит от компилятора, т.к. порядок вычисления операдов в общем случае не оговаривается стандартом.
Не знаю как у вас, но мой компидятор при компиляции выдает (совершенно справедливое) предупреждение о возможном неопределенном поведении.
Для подтверждения своего объяснения сошлюсь на раздел 6.2.2 специального издания «Языка программирования C++» Страуструпа. Там написано, что порядок вычисления аргументов операции неопределен за исключением операций «,», «&&» и «||».
Там же, в разделе 6.2 приведен список операций с приоритетами, в котором можно видеть, что операция << иметт более низкий приоритет, чем ++. Очевидно, что в выражении (а это именно выражение)
cout<<x<<x++<<x;
нет операций кроме << и ++. Так как ++ имеет больший приоритет, она выполняется первой, в итоге получаем что-то вроде
cout<<6<<5<<6;
А это уже выводится как обычно.
Кстати, Страуструп пишет, что старым компиляторам не стоит особо доверять из-за мелких несовместимостей и несоответствий стандарту. Проверьте, если есть возможность, еще каким-нибудь компилятором.
Чтобы окончательно развеят сомнения, предлагаю найти в каталоге include из комплекта вашего компилятора файл ostream.h и убедиться, что никакого чтения справа налево нет. Есть перегруженная операция <<, которая если слева находится объект типа ostream, а справа — объект известного типа, кидает правый операнд в поток.
P.S. Рекомендую почитать о Sequence points. Например это: http://alenacpp.blogspot.com/2005/11/sequence-points.html