C++. Как работает постфиксный инкремент? - Вопросы по С+

Вопрос C++. Как работает постфиксный инкремент?

Регистрация
14 Апр 2013
Сообщения
82
Репутация
0
Спасибо
0
Монет
0
Есть 2 строчки кода:
int i = 0;
cout << i++ << i++ << i++;
Почему на консоль выводится 210? Я бы понял, если выводилось бы 012 или 222. Объясните почему выводится в обратном порядке
 
Регистрация
17 Апр 2013
Сообщения
83
Репутация
1
Спасибо
0
Монет
0
Потому, что это типичный пример "неопределённого поведения". Стандарт не определяет последовательность, в которой будут вычислены части выражения. Потому код, генерируемый компилятором, может вычислять части выражения в любом порядке - независимо от того, как выражение записано в исходном коде. В твоём случае имеется ОДНО выражение, содержащее три операции << и три операции ++.Операции << код, генерируемый компилятором, выполнит строго слева направо. А вот операции ++ будут выполнены в том порядке, который компилятор сочтёт оптимальным. P.S. Хорошим тоном являет НЕ использовать повторно в том же выражении переменную, к которой применены операции ++ или --.
 

iva

Capitan

iva

Capitan
Регистрация
10 Авг 2013
Сообщения
87
Репутация
0
Спасибо
0
Монет
0
Всё зависит от того, как компилируются равнозначные действия - справа налево или слева направо. И что приоритетней в равнозначных операциях - << или ++ Это равнозначно вопросу "Сколько будет 6/3*2? 4 или 1 ?"
 
Сверху Снизу