关于C++中无操作数throw语句作用及代码执行逻辑的疑问
C++ 异常相关问题解答
1. throw; 语句的作用
throw; 是C++中的空抛语句,仅允许在catch块(或catch块内部调用的函数)中使用,作用是重新抛出当前正在被捕获处理的异常:它不会创建新的异常对象,只会把当前已经抓到的异常原封不动地传递到上层调用栈,让上层的异常处理逻辑可以继续处理这个异常。
2. 输出内容差异的底层原理
2.1 保留throw;时的执行流程
- main函数首先执行
cout << "CleanCity mission starts";,输出对应内容 - 进入main的try块,调用
CleanCity()函数 CleanCity内部的try块抛出类型为const char*的字符串常量"Garbage"- 异常被
CleanCity内部的catch(const char *)捕获,执行cout << "Throw in Dustbin";输出对应内容 - 遇到
throw;,将当前捕获的const char*异常重新向上层抛出 - 异常传递回main函数的调用栈,被main的
catch(const char *)捕获,执行cout << "City Cleaned";,输出对应内容 - 最后执行
cout << "Well Done";,程序正常退出
2.2 删除throw;时的执行流程
- 前四步和上述流程完全一致,
CleanCity内部的catch块捕获异常后输出Throw in Dustbin - 没有
throw;就意味着当前异常已经被处理完毕,不会再向上层传递 CleanCity函数正常返回,main的try块内没有未处理的异常,因此main中的catch块完全不会被触发,自然不会输出City Cleaned- 直接执行后续的
cout << "Well Done";
内容的提问来源于stack exchange,提问作者loveofprogramming
相关产品推荐
相关产品推荐

