首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常抛出异常

异常抛出异常
EN

Stack Overflow用户
提问于 2013-03-22 21:11:32
回答 1查看 100关注 0票数 2

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

代码语言:javascript
复制
class Foo
{
public:

    Foo()
    {
        throw 0;
    }
};

class RandomException
{
public:

    Foo f;
};

void bar()
{
    throw RandomException();
}

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

在上面的例子中,我有一个未处理的异常。现在,如果我将main函数的主体更改为:

代码语言:javascript
复制
// Case #2
int main()
{
    try
    {
        bar();
    }
    catch (int)
    {
    }

    return 0;
}

我接受了这个例外。没有未处理的异常,代码运行良好。如果我把代码改成:

代码语言:javascript
复制
// Case #3
int main()
{
    try
    {
        bar();
    }
    catch (RandomException&)
    {
    }

    return 0;
}

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

我想知道为什么在第二种情况下我没有未处理的异常,而在第三种情况下我有,即使在这两种情况下我都抛出了两个异常,一个int和一个RandomException类型。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-22 21:17:54

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

如果您有相应的处理程序(如案例#2),则控制权将转移到该处理程序。如果没有(如案例#3所示),将调用std::terminate()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15571216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档