Цитата:
Первоначальное сообщение от 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.