я прочитал в книге следующее заявление:побочные эффекты, точки последовательности и неопределенное поведение
n = ((i++) > (j)?(i++):(j));
Книга утверждает, что полагая I> J, п имеет неожиданное значение и я увеличивается в два раза.
Я не понимаю, почему n после этого утверждения имеет ожидаемое значение.
Я прочитал много примеров о непредсказуемом поведении, так что здесь моя теории (не объяснение книги, так как там нет) и скажите мне ли я право:
первых, (я ++)> (j), и i может или не может быть увеличен до .
Предполагается, что i> n, (i ++) следует оценить. Мы еще не знаем , был ли я еще прирост или нет, поэтому весь этот оператор не определен. мы не уверены, вернется ли i или i + 1.
Теперь вот проблема предполагая мою теорию прав - Почему мы не знаем, ли я был еще или нет увеличивается? Если бы эта строка кода была записана как оператор if, я уверен, что мне придется увеличивать ее раньше. Так почему же соединение, если оно отличается?
Спасибо.
Вы уже ответили на свой вопрос в названии. Читайте о точках последовательности. – Olaf
@ WumpusQ.Wumbley: Спасибо, CV отозван. – Olaf
«Так почему же соединение, если оно отличается?» Это? http://port70.net/~nsz/c/c11/n1570.html#6.5.15p4 – Olaf