And*_*uel 1 c++ exception-handling
这个想法是"尝试you()
,如果尝试失败_do()
,如果失败则报告第一次尝试的异常,即you()
".
void that_thing() {
try {
you();
} catch( ... ) {
bool error=false;
try {
_do();
} catch( ... ) {
error = true;
}
if( error ) throw;
}
}
Run Code Online (Sandbox Code Playgroud)
用Gcc测试它工作得很好,我想知道它是否适用于任何编译器.为了更清楚,我期待的奇怪行为是throw;
重新抛出内部异常.
编辑:这个问题不是关于最内在的问题catch
,而是关于在捕获最内层之后重新抛出外部异常.问题是,如果这种重新抛出在法律上肯定没有在被指向相似的问题上接近.
小智 5
该标准要求实现正确嵌套异常.引用标准:
15.1抛出异常[except.throw]
...
8 没有操作数的throw-expression重新抛出当前处理的异常(15.3).
15.3处理异常[except.handle]
...
7当catch子句的形式参数(如果有)的初始化完成时,处理程序被认为是活动的....当catch子句退出或
std::unexpected()
由于throw而进入后退出时,处理程序不再被视为活动状态.8最近激活的处理程序仍处于活动状态的异常称为当前处理的异常.
当您的代码到达时throw;
,内部异常处理程序不再处于活动状态:catch子句已退出.外部异常处理程序仍处于活动状态:它尚未退出,并且std::unexpected()
尚未被调用.因此,实现必须支持此用法,并重新抛出外部异常.在内部处理程序退出后清除的全局"当前异常"指针将不符合C++标准的要求.
归档时间: |
|
查看次数: |
194 次 |
最近记录: |