关于try,cathch抛出异常

2018-10-16  本文已影响0人  太平小小草
  • 在学习C++的过程中,接触try,catch语句很早,但很少认真研究,也很少主动去使用。几年前有个同事问我怎么使用try,catch的问题,我当时没回答出来。去年略微学一下安卓开发,看到java代码里大量使用try,catch,想想肯定是有原因的。
  • 事实上,在我这么多年参入的C++项目中,看到使用try,catch的地方并不多,至少不像java那么普遍。印象最深的,就是我编写自动升级程序时,借用了网上的一个http下载文件,该文件下载线程里,判断下载出错时使用try,catch,抛出了很多种异常情况。
  • 为什么一般C++应用程序程序员不愿意使用try,catch来捕捉错误呢?

    我的体会是:
    1,C++写应用层代码,因为C++语言的特性,实现起来比较底层和细节,需要程序员自己保证程序的健壮性,在代码里判断是否出错,写throw抛出异常的代码,这样就加大了工作量。如果每个地方都做这样的异常判断并抛出错误,程序健壮性是好,但是太花时间了。
    比如下面这段代码:
try{
string str = "liangchuan finish the job!";
char  oneword = str[100];
}
catch(exception e)
{
cout<<"[1]out of bound!"<<endl;
}

   这段代码是不会抛出异常的,因为C++的基本运算符 [] 只是做基本的访址操作,不会throw出异常。

2,既然需要程序员自己来判断异常并抛出,程序员就完全可以通过错误日志打印,或别的手段来侦查错误,没有必要非得用try,catch。比如写服务器端代码,判断出了错误信息直接用zlog日志打印出来,方便还直观。使用try后面那么大个 { 括起来不好阅读,很多地方都得加个try,catch,还与日志有重复。

3,应用程序调用的一些C++库中不一定有try,catch异常抛出。我们即使使用try,catch,很多错误依然无法捕捉到。

string str = "liangchuan finish the job!";
try{
char ch2 = str.at(100);
cout<<ch2<<endl;
}
catch(exception &e)
{ //exception类位于<exception>头文件中
cout<<"[2]out of bound!"<<endl;
}

这段代码会抛出异常,因为string::at函数里,做了抛出异常处理。所以不需要程序员自己来写throw出异常。但是,有怀疑有一些被调用的库里没做这种处理,或者处理不完善。

上一篇下一篇

猜你喜欢

热点阅读