当在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;
}现在我又有了一个未处理的异常。
我想知道为什么在第二种情况下我没有未处理的异常,而在第三种情况下我有,即使在这两种情况下我都抛出了两个异常,一个int和一个RandomException类型。
当抛出异常时,C++如何处理抛出的异常?
发布于 2013-03-22 21:17:54
在这里,RandomException对象的构造因异常而失败,因此throw RandomException()永远不会完成,并抛出int (0) (在构造RandomException的过程中)。
如果您有相应的处理程序(如案例#2),则控制权将转移到该处理程序。如果没有(如案例#3所示),将调用std::terminate()。
https://stackoverflow.com/questions/15571216
复制相似问题