gpt4 book ai didi

c++ - 异常抛出异常

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:49 25 4
gpt4 key购买 nike

在 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 和一个类型为 RandomException

C++在抛出异常的时候是怎么处理的?

最佳答案

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

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

关于c++ - 异常抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15571216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com