The reason at least for C++ is because checking for zero divisor and then throwing and handling an expetion can seriously affect performance on some systems. Thus division by zero is Undefined Behavior according to C++ standard.
5.6 Multiplicative operators
4 The binary / operator yields the quotient, and the binary % operator yields the remainder from the division
of the first expression by the second. If the second operand of / or % is zero the behavior is undefined. For
integral operands the / operator yields the algebraic quotient with any fractional part discarded;81 if the
quotient a/b is representable in the type of the result, (a/b)*b + a%b is equal to a; otherwise, the behavior
of both a/b and a%b is undefined
Some implementations thru do throw exceptions. But relaying on that may lead to unexpected results if code compiled with different compiler. For example see SEH in msvc
5 Expressions
4 If during the evaluation of an expression, the result is not mathematically defined or not in the range of
representable values for its type, the behavior is undefined. [ Note: most existing implementations of C++
ignore integer overflows. Treatment of division by zero, forming a remainder using a zero divisor, and all
floating point exceptions vary among machines, and is usually adjustable by a library function. —end note ]