美文网首页
关于try,cathch抛出异常

关于try,cathch抛出异常

作者: 太平小小草 | 来源:发表于2018-10-16 16:23 被阅读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出异常。但是,有怀疑有一些被调用的库里没做这种处理,或者处理不完善。

    相关文章

      网友评论

          本文标题:关于try,cathch抛出异常

          本文链接:https://www.haomeiwen.com/subject/efdhzftx.html