在C++中,在異常聲明說明符中,如果我聲明一個基類然後拋出一個派生類,是不是意外的異常?異常聲明中的派生對象類型是否意外?
1
A
回答
2
在C++中,在異常聲明說明符中,如果我聲明一個基類然後拋出一個派生類,那是一個意外的異常嗎?
不可以。
參考: C++ 03 15.4異常規範
帕拉6:
例外規格可以包括相同類型的多於一次,並且可以包括作爲相關的類通過繼承,即使這樣做是多餘的。異常規範也可以包含類std :: bad_exception(18.6.2.1)。
有一個在
第8段相關的例子:
[Example:
class X { };
class Y { };
class Z: public X { };
class W { };
void f() throw (X, Y)
{
int n = 0;
if (n) throw X(); // OK
if (n) throw Z(); // also OK <------- Example of the exact scenario you posted
throw W(); // will call unexpected()
}
—end example]
注意異常規範被視爲失敗和大多數編譯器不正確地實現他們的實驗。所以請避免(而不要)使用它們。
0
我知道這是可怕的非答案,但請不要使用異常規格:
http://www.gotw.ca/publications/mill22.htm
引述相關部分:
道德#1:不要寫一個異常規範。
道德#2:除了可能是一個空的,但如果我是你,我甚至會避免。
在C++ 11中對#2的警告是「noexcept」。
相關問題
- 1. UCanAccess UPDATE聲明的異常:「意外的頁面類型1」
- 2. bad_cast異常參考派生類對象
- 3. 使用聲明(派生類)
- 4. Protobuf-net StackOverflow異常與派生類型
- 5. 是否可以在Fortran中將矩陣聲明爲派生類型?
- 6. 指向派生類對象的基類指針可以訪問在派生類中聲明的新成員嗎?
- 7. 如何將迭代器聲明爲派生類對象?
- 8. 意外的類型 - 序列化異常
- 9. 在派生類中聲明枚舉
- 10. 如何聲明從特定類派生的類型參數?
- 11. 聲明泛型類型對象go
- 12. 聲明類對象數據類型
- 13. 是派生對象的模板基類型模板的子類
- 14. WebApi無法序列化從派生類聲明的屬性異常
- 15. 聲明對象類型的接口
- 16. 有關聲明的對象類型
- 17. 我是否僅在函數頭或聲明中指定了異常類型? (C++)
- 18. 如何從基類型中聲明的方法返回派生類型
- 19. JUnit異常「對象不是聲明方法的實例」
- 20. 火花的java:java.lang.IllegalArgumentException異常:對象不是聲明
- 21. 類成員是派生對象,其類型尚未知曉
- 22. 異常java.lang.IllegalArgumentException:對象不是在sun上聲明類的實例.reflect.NativeMethodAccessorImpl.invoke0
- 23. 在類聲明中拋出異常
- 24. 如何檢查派生類中對象的類型名稱?
- 25. 類對象的聲明confucion
- 26. 對象模型設計;基類對派生類的認識
- 27. 在類聲明中聲明一個類對象的指針
- 28. 找到派生對象的類型。用對象類型混合定義字典
- 29. 如何轉發聲明從前向聲明的模板基類派生的類?
- 30. C++抽象類型聲明