Это неопределенное поведение, когда выполнение программы зависит от порядка выполнения?

В выражении формы

f( g(), h() );

порядок оценки g() а также h() не определено. Это только указать, что одно должно произойти раньше другого. Если g() а также h() у обоих есть видимые побочные эффекты, от которых зависит выполнение программы, это неопределенное поведение?

1

Решение

«Неопределенное поведение» имеет очень конкретное техническое значение: это означает, что буквально нет никаких ограничений на то, что может делать программа. Это может поджечь компьютер или оскорбить пользователя. Здесь порядок выполнения неопределенные — Есть несколько вариантов того, что может произойти, в зависимости от порядка оценки. Вы просто не можете точно предсказать, какой это будет, не зная больше о компиляторе, оптимизаторе и среде исполнения.

6

Другие решения

Нет, это не так. Семестр неопределенное поведение Значит это что-нибудь может произойти (в том числе сбои) в программе. Здесь поведение непредсказуемо, это означает, что может произойти одно или другое, и вы не можете полагаться на порядок оценки.

Большая разница в том, что в вашем случае теоретически вы можете вернуться в нужное русло в своей программе, проверив, какой порядок был выбран после каждого вызова, и действуя соответствующим образом. С другой стороны, как только вы нажмете неопределенное поведение Случай, вы облажались: он может укусить вас в любое время, в любом месте, любым способом, пока программа не закончится.

2

По вопросам рекламы [email protected]