Тема: c++ cout
Показать сообщение отдельно
Старый 21.11.2003, 16:12   #22   
Registered User
 
Сообщений: 67
Регистрация: 08.07.2003
Возраст: 45

Fisher вне форума Не в сети
Re: c++ cout

Цитата:
Первоначальное сообщение от LSL
Друг-сишник задался вопросом:

i = 1

cout << i << i++ << i

Почему на выходе 2 1 2, ведь должно 1 1 2 ?
Ничего не должно быть, т.к. тут undefined behaviour и поэтому может быть все, что угодно, вплоть до форматирования диска.

Fisher добавил [date]1069425240[/date]:
Цитата:
Первоначальное сообщение от RomanPshenichny
Точка следования в обоих вариантах одна.[/B]

Все пераметры operator << и func вычисляются до вызова самих функций.
Все аргументы не обязаны вычисляться до вызова первой из функций.

Цитата:
Т.е. сначала посчитали i, i++, i, а потом уже вызвали функции. Порядок вычисления i, i++, i внутри одной точки следования не определен.
Дело не в том, что не определен порядок вычисления подвыражений внутри выражений, а в том, что нет гарантированных точек следования между вычислением i и i++. Undefined behaviour.
  Ответить с цитированием