c++ - 为什么 `catch` 在这里接球?
问题描述
我不太确定这里发生了什么。很明显,为什么内扣子能抓到throw 2
,而外扣子为什么catch(int x)
要抓throw
呢?我认为catch(int x)
应该只捕获整数值。是否有可能第二次throw
抛出第一次咳嗽(即 2)?
try
{
try
{
throw 2;
}
catch (int n)
{
std::cout << "Inner Catch " << n << std::endl;
throw;
}
}
catch (int x)
{
std::cout << "Outer Catch " << x << std::endl;
}
谢谢!
解决方案
你不能throw
什么都没有。throw;
单独可以在 catch-block 中使用以重新抛出当前处理的异常。从cppreference:
重新抛出当前处理的异常。放弃当前 catch 块的执行并将控制权传递给下一个匹配的异常处理程序(但不传递给同一 try 块之后的另一个 catch 子句:它的复合语句被认为已“退出”),重用现有的异常对象:没有新的对象产生。仅当当前正在处理异常时才允许使用此形式(如果以其他方式使用,则调用 std::terminate)。如果在构造函数上使用,与 function-try-block 关联的 catch 子句必须通过重新抛出来退出。
我认为 catch(int x) 应该只捕获整数值
这就是它的作用。
第二次投掷是否有可能抛出第一次咳嗽(即 2)?
正是这样。
推荐阅读
- xamarin.forms - Xamarin 表单:epubreader.cross 的问题
- sql-server - 通过 SSIS 同时使用多个 SQL Server
- c++ - Arduino:自定义库产生奇怪的行为
- java - Java中的类型转换是否也会导致内存字节的转换?
- javascript - 定位一个没有 id 和 class 的元素
- javascript - 将数组值推入 Object
- r - 从 excel 文件的大型数据集中删除/删除所有空白单元格/空值
- python - 获取 TypeError: must be str, not list 尝试与聊天机器人交谈时,您可以在下面找到代码
- c# - 尝试获取 BottomNavigationView 时使用 FindViewById<> 返回 null
- mysql - 在mysql中找到多个字段的相同记录