依旧的博客

技术学习

C++博客 首页 新随笔 联系 聚合 管理
  17 Posts :: 1 Stories :: 2 Comments :: 0 Trackbacks

有两个比较基本的问题:

1. 为什么要用异常代替错误码?

错误码的缺点:

1) 默认是可以忽略的,因为调用函数时可以不处理其返回值,从而错误处理要依赖于程序员的主动性,而不是程序机制的要求;

2) 不能跨作用域传送,必须逐层向上转发,即使中间没有对错误码进行重新定义;
 

使用异常可以解决解决这两个问题:

1) 异常默认是不可忽略的,抛出的异常必须捕获,否则就会报错;

2) 异常可以跨作用域传送,从而错误的发现和处理被很好地分离开来;
 

 

2. 异常和断言的区别:
 

异常被捕获后可以不作处理,程序从捕获位置继续执行。而断言是完全无法忽略的,程序在断言失败处立即终止。因此断言通常用于调试版本,用来发现程序中的逻辑错误。虽然异常也能起到这样的作用,但是不应该用异常代替断言:
1) 如果发现了逻辑错误,必须修改程序,而不可能在程序中进行处理和恢复,所以不需要向外传送,没有必要使用异常。
2) 使用断言的开销比异常小得多,而且断言可以从发布版中完全去除。
 

异常用于处理正确程序中的运行期问题(比如内存分配失败,窗口创建失败,线程创建失败,打开文件失败),以尽可能恢复,而不是终止程序。对于运行异常,使用断言是非常不合适的,理由很显然:
1) 断言在发布版不起作用;
2) 断言的处理方式不够友好;
3) 运行异常不是程序错误,没有必要报告源代码出错位置;



参考资料:

1.《C++编程规范-101条规则、准则与最佳实践》/Herb Sutter,Andrei Alexandrescu 著 刘基诚 译 人民邮电出版社
2.《C++程序设计语言》/Bjarne Stroustrup 著 裘宗燕 译 机械工业出版社
3.《C与C++中的异常处理》/Robert Schmidt 著 无情 译 http://download.pchome.net/development/reference/11135.html

posted on 2006-10-19 21:28 依旧的博客 阅读(1431) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理