Al contrario di linguaggi come Java o Ada, in C++ non gestire la divisione per zero con una eccezione è stata una precisa scelta di design del linguaggio per una questione di efficienza.
Ha scritto Stroustrup :
"low-level events, such as arithmetic overflows and divide by zero, are assumed to be handled by a dedicated lower-level mechanism rather than by exceptions. This enables C++ to match the behaviour of other languages when it comes to arithmetic. It also avoids the problems that occur on heavily pipelined architectures where events such as divide by zero are asynchronous."
Per la catch
http://msdn.microsoft.com/en-us/library/6dekhbbc.aspx