|
例外規格(Exception
Specifications)指的是在函式定義時,宣告其將丟回某些類型的例外,當您宣告一個函式將丟回例外物件時,通常表示該函式中發生某些類型例外
時會將之丟出(函式中可能不處理,或是處理完後重新丟出),呼叫該函式的函式必須負責處理它所丟出的例外,另一方面,您也只能丟出函式上所指定的例外,這
意味著除了指定的例外之後,其它類型的例外您必須在函式中加以處理。 要宣告一個函式丟出例外,其語法如下: return-type function throw
(type1, type2, type3) {
// .... throw type1; // .... throw type2; // .... } 例外規格是函式定義的一部份,函式宣告式與定義式必須都寫出來,例如: void
divide(int, int) throw(DividedByZero);
void divide(int a, int b) throw(DividedByZero) { .... } 例外的丟出是在執行時期引發的,當在執行時期丟出未列於例外規格中的例外時,unexpected()會被呼叫執行,它預設會呼叫terminate() 函式,結果就是終止程式。 如果想限制函式不丟出任何類型的例外,則在函式定義時使用throw,但不指定任何類型的例外,例如: void
function() throw() {
.... } 如此一來,所有的例外都不能從函式中丟出,所以例外的發生都必須在函式中捕捉並處理完畢。 在定義函式指標時,如果函式上有宣告例外規格,則例外規格也必須一併寫出,例如宣告一個可指向前例中divide的函式指標: void (*fptr)(int, int) throw(DividedByZero); |