c++ - 嵌套的 catch 运算符

标签 c++ exception

我需要捕获可能由 try...catch 构造中的代码抛出的异常,并根据异常类型执行某些操作。但如果抛出任何异常,我也想做一些代码。 我这样做了:

try
{
    // code
}
catch (...)
{
    try
    {
        throw;
    }
    catch (exc1)
    {
        // handling
    }
    catch (exc2)
    {
        // handling
    }
    // here is code that are executed if any exception are thrown
}

我的代码有效,但我想知道标准是否对此有任何说明。 也许有更好的方法?

UPD:对于评论回复缓慢,我们深表歉意。很简单,英语对我来说是第二语言。

UPD:我认为 AdelNick 的代码或 Steve Jessop 的第二个代码或 David Rodríguez 的第二个代码 - dribeas 适合我。

最佳答案

你的方法不好,因为//这里是抛出任何异常时执行的代码如果exc1都不会执行>exc2 分支捕获异常。您的代码是以下代码的等效版本:

try
{
    // code
}
catch (exc1)
{
    // handling
}
catch (exc2)
{
    // handling
}
// here is code that are executed if any exception are thrown

C++ 语言不支持 finally block ,如果您需要的话。这是因为对象的析构函数负责释放资源,而不是 finally block 。这是 Stroustrup's explanation的主题。

关于c++ - 嵌套的 catch 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20330194/

相关文章:

c++将矩阵转换为行指针 vector

c++ - 范围内的随机 float ?

Java - 更精确的重新抛出的功能

java - NullPointerException错误问题

c++ - 忽略 C++ 的 Visual Studio 异常设置

java - 在 Java 生产代码中使用 Junit Assert API 可以吗

Java - 任务和 future - 我需要捕获异常还是可以将它们留给应用程序线程?

c++ - 为什么错误 "invalid conversion from ' char' 到 'const char*"?

c++ - (渲染粒子)我应该学习shader还是OpenCL?

c++ - 代码不会终止于 -1