<1>c++異常匹配規格是根據對象的靜態類型進行匹配的c++
<2>typedef void (*f)() throw(int) typedef 語句中不能有異常規格說明ide
<3>throw;向上級拋異常函數
throw x;拋出異常spa
1.使用異常說明:對象
void foo(void) throw(MyException)/*異常說明,而且foo函數體中只能拋出異常說明中的異常*/{}//只拋出MyException異常資源
void foo(void){}//拋出任何異常it
void foo(void)throw(){}//不拋出異常io
另外:若是一個函數拋出了一個在其異常說明中未被列出的異常,那麼std::unexpected()函數就會被調用。class
它的缺省行爲是調用std::terminate()函數,然後者又會調用abort()函數;循環
2.異常能夠嵌套
3.若是函數的聲明有異常說明,那麼定義也須要有異常的說明
4.構造函數能夠拋出異常,並且不少場合以這種方式處理構造過程當中的錯誤會更簡單。
可是要注意,拋異常前應該作必要的釋放資源工做,由於不徹底對象的析構函數是不會被調用的。
5.不要在析構函數中拋出異常,由於拋出異常會致使對象的析構(而C語言中若是出錯可能會致使某些資源不能釋 放),這樣可能形成析構和拋出異常之間的死循環。
若是在析構函數中有異常,應該在內部處理,不要拋出。
6.能夠不處理拋出的異常,而交給上一層調用者,即向上一層繼續拋出異常
7.示例:
class AppException {};
class SysException {};
throw AppException ();
throw SysException ();
try {
} catch (AppException& ex) {
ex.what();
} catch (SysException& ex) {
}
8.注意__LINE__/__FILE__在自定義異常中的應用:
throw MyExp (__FILE__, __LINE__);
9.不能拋出比基類虛函數更多的異常