当前位置:   article > 正文

c++ try catch语句_教你一招搞定try,catch,finally的执行顺序

c++ try catch finally

在面试的时候,经常会问到一些很基础的知识,比如有没接触过try,catch,finally?他们的执行顺序是怎么样的呢?你对此嗤之以鼻,这不是很简单吗?按照顺序执就行了。没错,可是如果每一块有return,并且有抛异常,扑捉异常的情况呢?估计很多 人都答不上来。下面我列出try,catch,finally的各种情况,然后总结一招搞定try,catch,finally的执行顺序。

81842f5794584256a23863958ace95fa

举例:

  • 情况1: try{} catch(){}finally{} return;

显然程序按顺序执行。

  • 情况2: try{ return; }catch(){} finally{} return;

先执行try块中return 语句(包括return语句中的表达式运算),但不返回;

执行finally语句中全部代码

最后执行try中return 返回

finally块之后的语句return不执行,因为程序在try中已经return。

  • 情况3: try{ } catch(){return;} finally{} return;

1、程序先执行try,如果遇到异常执行catch块,

有异常:

执行catch中return语句,但不返回

执行finally语句中全部代码,

最后执行catch块中return返回。 finally块后的return语句不再执行。

无异常:

执行完try再finally再return…

  • 情况4: try{ return; }catch(){} finally{return;}

执行try块return语句(包括return语句中的表达式运算),但不返回;

再执行finally块,

执行finally块,有return,从这里返回。

此时finally块的return值,就是代码执行完后的值

6878cfd9b2cd422b82c7da099c2e6613
  • 情况5: try{} catch(){return;}finally{return;}

程序执行catch块中return语句(包括return语句中的表达式运算),但不返回;

再执行finally块,执行finally块,有return,从这里返回。

  • 情况6: try{ return;}catch(){return;} finally{return;}

1、程序执行try块中return语句(包括return语句中的表达式运算),但不返回;

有异常:

执行catch块中return语句(包括return语句中的表达式运算),但不返回;

再执行finally块

执行finally块,有return,从这里返回。

无异常:

再执行finally块

执行finally块,有return,从这里返回。

8884820c0a0d42dabb99b064c6449340

最终结论:

任何执行try 或者catch中的return语句之后,在返回之前,如果finally存在的话,都会先执行finally语句,如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,编译器把finally中的return实现为一个warning。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/114860
推荐阅读
相关标签
  

闽ICP备14008679号