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では、どちらの場合も1int
つと1つのタイプの2つの例外をスローしていRandomException
ます。
例外のスロー中に例外がスローされた場合、C ++はどのように処理しますか?