В выражении формы
f( g(), h() );
порядок оценки g()
а также h()
не определено. Это только указать, что одно должно произойти раньше другого. Если g()
а также h()
у обоих есть видимые побочные эффекты, от которых зависит выполнение программы, это неопределенное поведение?
«Неопределенное поведение» имеет очень конкретное техническое значение: это означает, что буквально нет никаких ограничений на то, что может делать программа. Это может поджечь компьютер или оскорбить пользователя. Здесь порядок выполнения неопределенные — Есть несколько вариантов того, что может произойти, в зависимости от порядка оценки. Вы просто не можете точно предсказать, какой это будет, не зная больше о компиляторе, оптимизаторе и среде исполнения.
Нет, это не так. Семестр неопределенное поведение Значит это что-нибудь может произойти (в том числе сбои) в программе. Здесь поведение непредсказуемо, это означает, что может произойти одно или другое, и вы не можете полагаться на порядок оценки.
Большая разница в том, что в вашем случае теоретически вы можете вернуться в нужное русло в своей программе, проверив, какой порядок был выбран после каждого вызова, и действуя соответствующим образом. С другой стороны, как только вы нажмете неопределенное поведение Случай, вы облажались: он может укусить вас в любое время, в любом месте, любым способом, пока программа не закончится.