当玩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
和一个类型{ {1}}。
如果在抛出异常时抛出异常,C ++如何处理事情?
答案 0 :(得分:4)
这里,RandomException
对象的构造失败并出现异常,因此throw RandomException()
永远不会完成,并且抛出int
(0)(在构造{{1}的过程中}})。
如果你有一个处理程序(如#2),控制权将转移到该处理程序。如果不是(如#3),将调用RandomException
。