c++ 异常处理与错误号之间的选择
2007-05-23 22:24
295 查看
今天新项目设计讨论时涉及到了错误处理的情况,今天又看了看《c++编程规范》对错误处理有所感:
结论:优先使用异常而不是错误号处理错误。
异常与错误号对比:
1)使用错误号的代码繁琐,要想写出健壮的程序,应该随时注意进行错误的检查,此时使用错误号比较麻烦。
而使用异常则可以将容易出现错误的代码写到 try{}中即可。
2)使用错误号容易忽略对错误的处理,因为代码默认是忽略错误返回值的。而异常除非显式捕获才能忽略或者淹没。
3)使用错误号有时难以发现错误,如一些API的执行。
4)错误号不是扩作用域传播的,要想知道底层的错误,必须由底层主动的抛出错误编号。而异常则是自动跨域传播的。
5)在处理错误时,使用错误号会使错误的处理遍布于程序之中,而使用异常则会使错误的处理集中于Catch(){}中,这样会使程序变得优雅。(挺好!)
6)在构造函数中,无法使用错误号。因为构造函数没有返回值。其次,对于某些操作符的重载也不易用错误号,因为他们的返回值是具有特殊意义的。
当然错误号也有自己适合的地方,以后补充!
结论:优先使用异常而不是错误号处理错误。
异常与错误号对比:
1)使用错误号的代码繁琐,要想写出健壮的程序,应该随时注意进行错误的检查,此时使用错误号比较麻烦。
而使用异常则可以将容易出现错误的代码写到 try{}中即可。
2)使用错误号容易忽略对错误的处理,因为代码默认是忽略错误返回值的。而异常除非显式捕获才能忽略或者淹没。
3)使用错误号有时难以发现错误,如一些API的执行。
4)错误号不是扩作用域传播的,要想知道底层的错误,必须由底层主动的抛出错误编号。而异常则是自动跨域传播的。
5)在处理错误时,使用错误号会使错误的处理遍布于程序之中,而使用异常则会使错误的处理集中于Catch(){}中,这样会使程序变得优雅。(挺好!)
6)在构造函数中,无法使用错误号。因为构造函数没有返回值。其次,对于某些操作符的重载也不易用错误号,因为他们的返回值是具有特殊意义的。
当然错误号也有自己适合的地方,以后补充!
相关文章推荐
- C/C++ 错误处理(文档):未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- C++异常以及错误处理
- 【C++】错误处理和异常处理
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- 【day0402】C++异常处理---错误但能处理的
- C/C++ 错误处理(文档):未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- C++异常处理解析3: 错误处理(返回值, 错误标志变量, 异常)各有千秋
- 学习c++ ,对异常错误输入的处理
- C++中发生“"0x54402fed (msvcr100d.dll) 处有未经处理的异常:”内存方面的错误的解决方案
- C++【错误和异常的处理】
- C++ FAQ学习笔记 17章 异常和错误处理
- C++中的错误处理与异常
- 【vs调试】C/C++ 错误处理(文档):未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- [转贴]从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- SURF角点检测出现错误:SURF.exe 中的 0x756ad36f 处未处理的异常: Microsoft C++ 异常: 内存位置 0x003fcaf0 处的 cv::Exception。
- C++ Coding Standards:错误处理和异常
- 【C++】错误处理和异常处理
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介