Является ли (++ i) ++ неопределенным поведением? - PullRequest
6 голосов
/ 03 декабря 2010

Является ли (++i)++ неопределенным поведением? Возможно ли, что побочный эффект приращения префикса происходит после извлечения увеличенного объекта для приращения постфикса для работы? Это показалось бы мне странным.

Мое внутреннее чувство говорит, что это не определено в C ++ 03 и хорошо определено в C ++ 11. Я прав?

Ответы [ 2 ]

11 голосов
/ 03 декабря 2010

Мое внутреннее чувство говорит, что это не определено в C ++ 03 и четко определено в C ++ 0x.

Да, вы правы.Поведение не определено в C ++ 03, потому что вы пытаетесь изменить i более одного раза между двумя точками последовательности.

Поведение хорошо определено в C ++ 0x, потому что (++i)++ эквивалентно (i += 1)++.Побочные эффекты оператора += упорядочены относительно ++ (постинкремент), поэтому поведение четко определено.

0 голосов
/ 06 марта 2012

Это неопределенное поведение, поскольку i изменяется более одного раза между двумя точками последовательности.

...