有关错误处理

有关异常处理try{int i10ii/0}catch ( exception &e ){cerr Caught e.what( ) endlcerr

有关异常处理
try
{
int i=10;
i=i/0;
}
catch ( exception &e ) 
{
cerr << "Caught " << e.what( ) << endl;
cerr << "Type " << typeid( e ).name( ) << endl;
}

对异常处理用的比较少,也有点迷惑,原以为上面的语句会捕捉到溢出,不会导致程序crash,但是程序还是crash掉了。
难道异常处理就是应该要在i/0前检查出是否会有除以0的可能然后调用throw overflow_error("")来进行异常抛出吗?
这样的话在处理某些第三方的库的时候如果它遇到这种情况没有抛出异常那就根本处理不了了,终究只有程序crash。请大家指点一下。

[解决办法]
所以异常处理不能按自己的意愿来假设。
正常情况下,如果一个库函数可能抛出某种异常,文档中应该有说明的。
[解决办法]
除以0不会抛出异常。要用的话,自己抛出一个。
[解决办法]
C++语言本身并没有规定除以0要抛出标准异常。
基本类型的加减乘除,C++基本上完全兼容C,也不可能有这种规定。
[解决办法]
你怎么知道你进入catch?靠debug调试器?
那么,你被调试器欺骗了。
[解决办法]
编译的时候打开/EHa选项 (允许捕获结构异常和C++异常)

C/C++ / Code Generation / Enable C++ Exceptions / 选 EHa