嵌套的try-catch块?

new*_*mer 2 c++ exception try-catch

int main ()
{
    try
    {
        try
        {
            throw 5;
        }
        catch (int n)
        {
            throw;
        }
    }
    catch (...)
    {
        cout << "Exception occurred";
    }
}
Run Code Online (Sandbox Code Playgroud)

这打印出"异常发生"但是

int main ()
{
    try
    {
        try
        {
            throw;
        }
        catch (...)
        {
            throw;
        }
    }
    catch (...)
    {
        cout << "Exception occurred";
    }
}
Run Code Online (Sandbox Code Playgroud)

这只是错误.看起来我正在尝试捕捉完全一样!唯一的区别是,在第一种情况下我抛出一个int,然后是一般异常,但在第二种情况下,我两次抛出一般异常.程序是否混淆了去哪个捕获?

n. *_* m. 9

没有"一般例外"之类的东西,你就不会抛出这样的东西.

在第一个示例中,您抛出一个int,然后重新抛出您正在处理的异常.这就是throw没有争论的意思.

在第二个示例中,您将尝试重新抛出正在处理的异常.由于您当时没有处理异常,因此会出现错误.