You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 09:45:08