2

在 C++ 中处理异常时,我注意到一个奇怪的行为,我希望这里有人能解释一下。看下面的代码:

class Foo
{
public:

    Foo()
    {
        throw 0;
    }
};

class RandomException
{
public:

    Foo f;
};

void bar()
{
    throw RandomException();
}

// Case #1
int main()
{
    bar();
    return 0;
}

在上述情况下,我有一个未处理的异常。现在,如果我将main函数的主体更改为:

// Case #2
int main()
{
    try
    {
        bar();
    }
    catch (int)
    {
    }

    return 0;
}

我正在接受这个例外。没有未处理的异常,代码运行良好。如果我将代码更改为:

// Case #3
int main()
{
    try
    {
        bar();
    }
    catch (RandomException&)
    {
    }

    return 0;
}

现在我又遇到了一个未处理的异常。

我想知道为什么在案例 #2 中我没有未处理的异常,而在案例 #3 中我有,即使在这两种情况下我都抛出了 2 个异常,一个int和一个 type RandomException

抛出异常同时抛出异常时,C++如何处理?

4

1 回答 1

4

在这里,RandomException对象的构造失败并出现异常,因此throw RandomException()永远不会完成并int抛出(0)(在构造过程中RandomException)。

如果您有一个处理程序(如案例#2),控制将转移到该处理程序。如果不是(如案例#3),std::terminate()将被调用。

于 2013-03-22T13:17:53.827 回答