注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

刘邓

每天收获一点点-目标:富足

 
 
 

日志

 
 

C++异常处理  

2012-05-14 16:12:33|  分类: C++编程思想(卷 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
增强错误恢复能力是提高代码健壮性最有效的途径之一
异常抛出——throw
throw后跟任意类型包括自定义类类型和系统内置类型,一般抛出的是为异常处理设置的类(可以自定义,可以使用C++标准异常,也可以从标准异常中继承出自己所需的异常类并加以修改)。尽量为每种异常设置不同的异常类,这样能保证在出现异常时可以更好的发现错误所出现的原因。
异常捕获
C++用try{...throw...}catch(...){}来捕获异常,这种异常处理机制的一个好处是可以使程序员在一个地方专注于所需要解决的问题,而在另外一个地方对这段代码禅师的异常进行处理。

//异常处理是创建健壮代码不可缺少的内容
//良好的异常处理机制可以及时发现错误
// exception - <exception>
//logic_error ; runtime_error - <stdexcept>
//异常的具体内容参见C++编程思想第二卷第一章
#include<iostream>
#include<stdexcept>
#include<string>
using namespace std;
class MyException:public logic_error
{
public:
MyException(const string& msg):logic_error(msg){}
};
void f(int b) throw(int,MyException)
//函数规格说明书
//避免在模板类中使用,因为无法确定确切会出现什么异常
//另外异常规格说明应该满足继承“is -a ”条件,这需要满足派生类对应的函数
//规格说明要和基类一致
{

if(b == 0)throw b;
else throw MyException("F()");

}
int main(int argc, char* argv[])
{
while(1){
int i;
try{
cin>>i;
f(i);
//throw MyException("LIUdeng");
}
//下面的catch优点switch-case的意思,但是在正常的程序编写中切勿用
//try-catch代替控制流程书写,因为异常处理的代价是很大的,严重影响效率
//异常处理的目标是在没有发生错误时,有没有异常处理函数对于系统的运行没有
//任何影响,在异常发生时再起作用
catch(int i){cout<<i<<endl;}
catch(MyException &x){cout<<x.what()<<endl;break;}
catch(...){cout<<"Unknown Error!!!"<<endl;}
//捕获所有的异常,注意一定要放在最后,以避免架空其他异常处理器
}
system("pause");
return 0;
}


异常处理的内容还包括异常匹配(由于自动向上类型转换的存在,在异常匹配时应该先捕获最晚派生类异常,将基类放在最后匹配,否则会架空后面的匹配内容);全匹配在catch(...){}此处理器将处理所有没有被前面处理的异常;异常规格说明及其使用说明
1.9节中介绍了异常在编程中的应用:什么时候避免异常;异常的典型应用
最后介绍了1.10异常造成的开销:异常处理的开销不少,但是是有益开销(最典型的是将对象自动清理了,避免了烦人的内存泄露)

错误恢复是程序员在编写每个程序时最关系的内容,当使用C++创建程序的组件供他人使用时,错误恢复是非常重要的。基本的异常不难掌握,一旦能够掌握就可以在程序中开始使用。

异常是能够为用户要开发的项目提供直接和重大利益的特性之一(这也许是作者将异常处理放在第一章的原因吧)
  评论这张
 
阅读(90)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017