C ++ предполагает, что вы знаете, что делаете, не платите за то, о чем не просите, и не делает никаких предположений относительно платформ, для которых он предназначен.
Если вы хотите разделить числа,было бы совершенно неэффективно предписывать компилятору проверять знаменатель и выбрасывать перед делением.(Мы не просили это сделать.) Так что этот вариант отсутствует;у нас не может быть этой проверки на каждом делении, и это особенно расточительно, так как большинство делений не равны нулю.
Итак, как мы можем просто делить на ноль и выяснить, сработало ли это?Поскольку C ++ не может предположить что-либо о своей платформе, он не может предположить, что есть способ проверить результат с аппаратной точки зрения.То есть, хотя многие процессоры будут переходить к какому-то прерыванию, когда происходит деление на ноль, язык C ++ не может гарантировать такое.
Единственный вариант - позволить поведению быть неопределенным.И это именно то, что вы получаете: неопределенное поведение.
Языки ООП могут делать то или иное, это не имеет значения, так как ООП не является четко определенным и C ++ в любом случае не является языком ООП.В общем, используйте наиболее подходящий инструмент.(Исключения для исключительных ситуаций.)