异常的作用

异常有什么用:
首先请明确,异常的根本作用是跳转,不要看到异常就认为是出错,程序不出错你一样可以throw

异常有什么其他方法替代不了的地方:
跨层传递错误信息并且保证错误信息不丢失。让错误在它应该被捕捉的那一层捕捉。
C/C++ code ?
1
2
3
4
5
6
7
8
9
10
11
12
int  fun3()
{
     return  -1;
void  fun2()
{
     fun3()
void  fun1()
{
     fun2()
}

假设以上三段代码分别是三个不同的人写的。
fun3返回-1表示出错了。
但是如果fun1想知道出错了,需要fun2里面return fun3(),而不能直接调用fun3()就没有了。
直接调用fun3()就导致了错误码的丢失,上层逻辑由于写fun2的人的疏忽,不知道到底是什么错。

但是如果是异常机制,fun3抛出异常,fun2疏忽了,没有try,catch,这个异常不会丢,会继续抛到fun1。
也就是fun2不想关心出了什么错,就可以不关心。
fun1想关心,也不会因为fun2的不关心而导致关心不到,鞭长莫及。

异常怎么用:
尽量不用,就像C里面的goto一样,本质都是跳转。
参考《代码大全》中的一段话:仅在其他编码实践方法无法解决的情况下,才使用异常 

一些个人建议,仅供参考
1、在你自己的函数中,检查别人的传入参数是你的责任。
2、调用别人的函数,检查你自己传入的参数的合法性是你的责任,检查它的返回值也是你的责任。
3、别人的代码会抛出异常,不代表你就真的让他抛一个异常出来。我相信它肯定可以不抛出异常的。
4、不要用异常去代替合法性检查,那是推卸责任。
5、程序有bug是正常的,程序出现问题是正常的,依赖于异常来处理问题是不正常的。
6、一个try的代价,不一定比你写一个if的代价小,请参考《More Effective C++》第15条。
7、构造函数出错咋办,如果你处理不好构造,用Init代替构造,用Release代替析构,并确保这两个函数被调用。
8、注意变量初始化了再使用,给定一个安全的默认值,保证即使用户给了一个错误的值,你也可以按默认值跑通你的流程。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值