打印

异常处理问题

[复制链接]
895|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsbjb|  楼主 | 2012-3-27 18:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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中多出可引发异常)和异常类型!

相关帖子

沙发
txcy| | 2012-3-27 21:36 | 只看该作者
try里面的那两行不会抛异常,用不着catch。

使用特权

评论回复
板凳
秋天落叶| | 2012-3-27 21:44 | 只看该作者
标准c++异常处理是你必须要抛出一个类型,然后catch处理部分才知道要处理的类型。你不抛出那么就谈不上catch

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

193

主题

2354

帖子

0

粉丝