Попробовал в Dev C++ |
Вопросы и ответы |
Поиск
Кирилл Букаев | Репутация: 121 (Кандидат)
20 мая 2009 в 15:41
Тема: Программирование
Александр Шибанов | Репутация: 95 (Без статуса)
19 мая 2009 в 13:05
Тема: Программирование
Людамила Шовкопляс | Репутация: 100 (Кандидат)
18 мая 2009 в 21:30
Игорь Грудцин | Репутация: 101 (Кандидат)
16 мая 2009 в 22:17
Тема: Операционные системы
Юлия Абрамкина | Репутация: 98 (Без статуса)
16 мая 2009 в 10:50
Тема: Операционные системы
Elvin Ivan | Репутация: 97 (Без статуса)
10 мая 2009 в 21:33
Виталий Мосин | Репутация: 101 (Кандидат)
9 мая 2009 в 23:54
Агата Дмитриева | Репутация: 96 (Без статуса)
6 мая 2009 в 21:16
Владимир Моисеев | Репутация: 99 (Без статуса)
2 мая 2009 в 23:43
Александра Шеметова | Репутация: 99 (Без статуса)
2 мая 2009 в 15:10
Федор Бурдун | Репутация: 100 (Кандидат)
1 мая 2009 в 00:23
Тема: Программирование
Александр Садиков | Репутация: 99 (Без статуса)
30 апреля 2009 в 23:27
Тема: Образование
Анастасия Моисеева | Репутация: 100 (Кандидат)
26 апреля 2009 в 12:10
Качараба Назар | Репутация: 99 (Без статуса)
24 апреля 2009 в 21:00
Анна Мишина | Репутация: 100 (Кандидат)
24 апреля 2009 в 11:51
Viat Izumrudov | Репутация: 99 (Без статуса)
23 апреля 2009 в 13:57
Тема: Аппаратное обеспечение
Любовь Абашина | Репутация: 102 (Кандидат)
22 апреля 2009 в 09:40
Тема: Базы данных
Александр М | Репутация: 95 (Без статуса)
20 апреля 2009 в 17:35
Тема: Программирование
Анита Романова | Репутация: 100 (Кандидат)
18 апреля 2009 в 16:28
Игроь Пегушин | Репутация: 101 (Кандидат)
16 апреля 2009 в 21:58
Тема: Операционные системы
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