當在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我這樣做,即使在這兩種情況下,我拋出兩種例外,一個int
和RandomException
類型之一。
C++如何在拋出異常時拋出異常時處理事件?
你爲什麼會拋出一個自定義異常類的異常_inside_?這太瘋狂了。 RandomException的構造函數調用了Foo的構造函數,並且只在case 2中捕獲該異常,而不是case 3. – stefan 2013-03-22 13:16:54
您最終在[The Daily WTF](http://thedailywtf.com/Articles/Crashception.aspx) 。 8v) – 2013-03-22 13:18:28
@stefan科學當然。爲什麼呢? – Zeenobit 2013-03-22 13:19:19