C++异常处理

异常处理

一、抛出异常(Throwing an Exception)

所谓异常是某种对象。最简单的异常对象可以设计为整数或字符串:

  • throw 42
  • throw “panic:no buffer!”

大部分时候,被抛出的异常都属于特定的异常类(也许会形成一个继承体系)。

二、捕捉异常(Catching an Exception)

我们可以利用单一或连串的catch子句来捕捉(catch)被抛出的异常对象。catch子句由3部分组成:关键词catch、小括号内的一个型别或对象、大括号内的一组语句(用以处理异常)。 下面是一个例子:

extern void log_message(const char*);
extern string err_message[];
extern ostream log_file;

bool some_function()
{
  bool status = true;
  // …………经过一些程序到达此处!
  catch(int errno){
    log_message(err_messages[errno]);
    status = false;
  }
  catch(const char *str){
    log_messsage(str);
    status = false;
  }
   //取某个异常类的对象
  catch(iterator_overflow &iof){
    log_message(iof.what_happend(log_file));//返回异常信息的类函数
    status = false;  
  }
  //最后
  return status;
}
  • 重抛:某些情况下可能无法完成异常的完整处理。在记录消息之外,重抛相同类别的异常。这时只需写下关键词throw即可。只能出现在catch子句中
catch(iterator_overflow &iof)
    { 
        log_message(iof.what_happened());
        //重抛异常,令另一个catch子句接手处理
        throw
  • 如果想要捕捉任何型别的异常,可以使用一网打尽(catch-all)的方式。只需在异常声明部分指定省略符号(……) 即可,像这样:
//捕捉任何型别的异常
catch...)
{
    log_message("exception of unknown type");
    // clean up
}

三、提炼异常(Tring for an Exception)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值