try
{
//int a=2, b=0;
//a = a / b;
char
*p =
"hello";
*p =
'H';
}
catch ([color=#FF0000]what_type1[/color] & e)
{ cout <<
"what_type1 occurred"
<< endl;
}
catch ([color=#FF0000]what_type2[/color] & e)
{
cout <<
"what_type2 occurred"
<< endl;
}
catch(...)
{
cout <<
"error occurred"
<< endl;
}
对于C++标准异常处理,最常用的就是try-throw-catch格式,在try块中,有些情况我们可以准确判断异常产生,并抛出异常,比如使用new申请内存,或者除0操作,我们可以throw指定类型的异常,这些异常会在相应类型的catch中被捕获,但是还有一些异常,无法预测它会抛出何种类型的异常,比如数组越界、修改常量字符串的值,本例中try块中有以下语句char *p = "hello"; *p = 'H'; 只有当程序执行到 "*p = 'H';"这句时,程序才会抛出异常,而调用者可能自己并不能觉察这种错误,因此也不会也无法用throw抛出异常,那如何捕获该异常究竟是何种类型的异常呢?在本例中,"*p = 'H';"异常,我试了很多中异常类型(包括 exception)都没有捕获到,只有catch(...)才能捕获到,但是用catch(...)捕获到的异常无法知道异常源(假如try中多出可引发异常)和异常类型! |