Попробовал в 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
Тема: Программирование
Максим Емельянов | Репутация: 103 (Кандидат)
26 ноября 2008 в 12:08
Тема: Программирование
Шуламит Короб | Репутация: 100 (Кандидат)
23 ноября 2008 в 11:35
Тема: Программирование
Кирилл Чабан | Репутация: 103 (Кандидат)
14 октября 2008 в 19:38
Тема: Программирование
Роман Белоус | Репутация: 140 (Кандидат)
28 июля 2008 в 11:47
Тема: Программирование
Владимир Олейник | Репутация: 105 (Кандидат)
4 июля 2008 в 11:32
Тема: Программирование
Ирина Баженова | Репутация: 116 (Кандидат)
23 июня 2008 в 14:12
Тема: Программирование
Артём Добрынин | Репутация: 98 (Без статуса)
19 июня 2008 в 11:04
Тема: Программирование
Ирина Малахова | Репутация: 99 (Без статуса)
11 июня 2008 в 14:13
Тема: Программирование
Mikhail Borisov | Репутация: 102 (Кандидат)
10 июня 2008 в 08:22
Тема: Программирование
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