三种错误处理的方法
来源:互联网 发布:钢铁出口数据 编辑:程序博客网 时间:2024/05/24 01:23
日常有道毒鸡汤:All our dreams can true if we have the courage to pursue then.
如果我们有勇气去追求,我们所有的梦想都可以成为现实。
我觉得这碗鸡汤很好喝,哈哈,路虽远,行则将至。
=======================================================
今天看《剑指offer》(88页底)的时候,看到了三种错误处理的方式,有一点点困惑,大概的总结一下。
一:采用返回值的方法
参考以下代码:[下面代码出处,以下还有两段](http://blog.csdn.net/dylgsy/article/details/946056%20%E4%BB%A3%E7%A0%81%E5%87%BA%E5%A4%84
int nRet = DoThing1();if(nRet != SUCCESS){ cout << "DoThing1 failed with error" << endl; if((nRet == -1) cout << "DoThing1 failed with error -1" << endl; if(nRet == -2) cout << "DoThing1 failed with error -2" << endl; goto err; // 负责清除资源}err: FreeSomeResource();
二:采用全局变量的方法,使用一个函数获取错误信息
参考以下代码:
if(DoThing1() == ERROR){ cout << "DoThing1 failed with error" << GetLastError() << endl; return false;}if(DoThing2() == ERROR){ cout << "DoThing2 failed with error" << GetLastError() << endl; return false;}
全局变量的意思应该是定义一个false,发生错误时只占用了这一个返回值,而GetLastError()函数会给出我们想要的错误信息,不需要象第一种方法一样。
三:异常
参考以下代码:
try
{
DoThing1();
DoThing2();
DoThing3();
}
catch(Exeception &e)
{
cout << “Error occur!” << e.Msg() << endl;
}
这样做的话,代码就清爽多了,而且如果我们在某层没截取到异常的时候,异常不会丢,它会继续往外层传,所以就不会有漏网之鱼。
使用异常之后,我们所有的函数都可以以这种的方式去写了。如下:
// DoThing1() 可能调用了其他人的接口
DoThing1()
{
try
{
…;
}
catch(…)
{
…;
}
}
// DoThing2() 可能调用了其他人的接口
DoThing2()
{
try
{
…;
}
catch(…)
{
…;
}
}
// main() 调用了我们的接口
void main()
{
try
{
DoThing1();
DoThing2();
}
catch(…)
{
…;
}
}
在try块中我们不用去管错误,只管逻辑,而在catch块中,我们才进行错误的处理。
这就有点像JAVA的代码了,但是我们C++ 程序员没办法象JAVA程序员一样完全使用异常处理,这是有历史原因的,因为异常处理关系到整套异常类的定义。JAVA已经定义了一个完整的类库,所有的错误处理都用异常来表示。但是我们C++程序员还是有很多的函数库是使用返回值的方法来做的。所以为了兼容C,我们没办法做到完全使用异常处理。
使用异常解决了使用返回错误代码方法存在的问题,当然,使用异常也不是没有代价的。异常会增加程序的负担,因此滥用异常也是不可取的。写若干try…catch和写数以千计的try…catch之间是有很大区别的。
四:总结三种方法的优缺点
- 三种错误处理的方法
- asp.net错误处理的三种方法
- Spring MVC处理错误的三种方法
- 三种错误处理的方法——从返回值到异常处理
- 三种错误处理的方法——从返回值到异常处理
- PDO错误处理的三种模式
- 3种错误处理的方法
- Java处理List的三种方法
- Android图片处理的三种方法
- 图片的三种处理方法
- myeclipse内存溢出处理的三种处理方法
- 处理JMeter乱码的三种处理方法
- MySql错误处理(三)- 错误处理的例子
- MySql错误处理(三)- 错误处理的例子
- SEHException的错误处理方法
- JPS错误的处理方法
- 传统的错误处理方法
- ASP.NET错误处理的三种方式
- 几种排序在最坏和最好情况下的时间复杂度
- 【bfs && 反向建边】2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) Jumping
- 本机绑定2个域名问题解决方案
- BP神经网络
- java学习笔记-集合之栈和队列
- 三种错误处理的方法
- LeetCode : two Sum
- kmp3746--kmp捣循环入门题
- Ubuntu 16.04 出现E: Problem executing scripts E: Sub-process returned an error code处理办法
- 【肠道生态】-CS0005-2017肠道微生态与健康研讨会嘉宾PPT
- 《数据结构与算法-Python语言描述》读书笔记(6)第6章二叉树和树(关键词:数据结构/算法/Python/二叉树/树)
- HDU5914 Triangle(思路)
- 有关continue与break的belabela....
- Java中的equals与==