傳統的錯誤處理是用不同的數值來表示不同類型的錯誤,其表達能力很有限,因為一個數字包含的信息量太少,而C++異常處理機制將異常類型化,顯然一個類型要比一個數字包含的信息量大得多。
比如我們常用的函數fopen(),當打開文件失敗是返回NULL,按照傳統的錯誤處理方法,在調用Fopen()后立即檢查其返回值,如果為NULL就進行錯誤處理,如果將返回NULL改為拋出異常OpenFailed,那么我們就不用在調用fopen()后馬上檢查返回值,而是在調用函數內部或者更高層的調用者那里設置異常處理器來捕獲這個異常,C++保證:如果一個異常在拋出點沒有得到處理,那么它將一直拋向上層調用者,直至main()函數,直到找到一個類型匹配的異常處理器,否則調用terminate()結束程序。
可以看出:異常處理機制實際上是一種運行時通知機制。
Class DevidedByZero{};
Double Devide(double a,double b)
{
If(abs(b)::numeric_limits::epsilon())
{
Throw DevidedByZero();//提前檢測異常發生條件并拋出自定義異常
Return a/b; //這才是可能真正發出錯誤的地方
}
Void test()
{
Double x=100,y=20.5
Try{
Cout<拋出異常DevidedByZero
}
Catch(DevidedByZero&){
Cerr<< “ Devided by zero!”<
}
}