Существует несколько ситуаций, которые стандарт C++ присваивает как неопределенное поведение. Например, если я выделяю new[]
, попробуйте освободить его с delete
(не delete[]
), это неопределенное поведение - anything can happen - это может сработать, это может привести к непредвиденным сбоям, это может привести к некорректному повреждению и установке заданной проблемы.Как объяснить неопределенное поведение новичков-новичков?
Это так проблематично, чтобы объяснить это все может случиться часть новичкам. Они начинают «доказывать», что «это работает» (потому что он действительно работает на реализации C++, который они используют) и спрашивает «что может быть неправильно с этим»? Какое краткое объяснение я могу дать, что побудило бы их просто не писать такой код?
Пощечина на руке? – villintehaspam
Точно так же вы все объясняете: «Покажи, не говори». –
Undefined не означает случайный, это означает, что реализация зависит. Код, который использует неопределенное поведение, не переносится, но он не будет вести себя иначе в альтернативные пятницы. (Несмотря на то, что вы, кажется, думаете). Как говорит Митч, если вы можете _show_ их, что код сломается, тогда сделайте это. Если вы не можете, то, возможно, вам стоит подумать, что вы не понимаете язык так же хорошо, как думаете. –