C++代码中throw关键字作用解析及try-catch执行逻辑问询
代码解析与疑问解答
代码示例
try{ // 可能抛出system_error的代码 -- snip -- } catch(const std::system_error& ex) { if(ex.code()!=std::errc::permission_denied){ // 不是权限拒绝错误 throw; } // 处理权限拒绝错误的恢复逻辑 --snip--- }
1. throw关键字的作用
这里的throw是重新抛出当前捕获的异常:当catch块抓到的不是std::errc::permission_denied类型的系统错误时,执行throw;会把这个异常原封不动地扔出去,交给上层调用栈里的其他catch块处理,当前catch块不会再往下执行恢复逻辑。
2. 这个try-catch会重复执行直到捕获到目标错误吗?
不会。这套try-catch逻辑只会走一次:
- 先执行try块里的代码,如果抛出了
std::system_error,就进入catch块; - 如果异常不是权限拒绝类型,直接重新抛出,当前的try-catch流程就结束了,异常会向上传递,不会再回到当前的try块;
- 只有抓到的是
std::errc::permission_denied时,才会执行后续的恢复逻辑,整个流程正常收尾。
要是想实现“反复执行直到拿到目标错误”的效果,得用循环(比如while)把整个try-catch包起来,但当前代码里没有这种循环,所以不会重复执行。
内容的提问来源于stack exchange,提问作者user2820579
相关产品推荐
相关产品推荐

