try
塊內使用throw
關鍵字丟擲的。異常處理程式使用catch
關鍵字宣告,它必須緊跟在try
塊之後。
|
|
An exception occurred. Exception Nr. 20 |
try
塊中。在本例中,該程式碼只是丟擲一個異常。
|
|
throw
表示式接受一個引數(在本例中為整數值20
),該引數作為引數傳遞給異常處理程式。try
塊的結束大括號之後立即使用catch
關鍵字宣告。catch
的語法類似於帶有單個引數的常規函式。此引數的型別非常重要,因為throw
表示式傳遞的引數型別會與之進行檢查,只有當它們匹配時,該異常才會被該處理程式捕獲。catch
表示式);每個處理程式都具有不同的引數型別。只有引數型別與throw
語句中指定的異常型別匹配的處理程式才會被執行。...
)作為catch
的引數,該處理程式將捕獲任何異常,無論丟擲的異常型別是什麼。這可以作為預設處理程式,捕獲所有未被其他處理程式捕獲的異常。
|
|
int
也不是char
的異常。throw
語句之後!。try
塊中巢狀try-catch
塊。在這些情況下,我們有可能內部catch
塊將異常轉發給其外部級別。這是透過不帶引數的throw;
表示式完成的。例如。
|
|
throw
說明符。例如。
|
|
myfunction
的函式,該函式接受一個char
型別的引數並返回一個double
型別的值。如果該函式丟擲除int
以外的任何型別的異常,該函式將呼叫std::unexpected,而不是查詢處理程式或呼叫std::terminate。throw
說明符為空,不帶型別,則表示任何異常都會呼叫std::unexpected。沒有throw
說明符的函式(常規函式)從不呼叫std::unexpected,而是遵循查詢其異常處理程式的正常路徑。
|
|
std::exception
,定義在<exception>
標頭檔案中。該類有一個名為what
的虛成員函式,它返回一個以null結尾的字元序列(型別為char *
),並且可以在派生類中被覆蓋,以包含某種異常描述。
|
|
My exception happened. |
&
)來捕獲異常物件,因此這也捕獲了派生自exception
的類,比如我們型別為myexception
的myex
物件。exception
的異常。它們是:exception | 描述 |
---|---|
bad_alloc | 由new 在分配失敗時丟擲 |
bad_cast | 由dynamic_cast 在動態轉換失敗時丟擲 |
bad_exception | 由某些動態異常說明符丟擲 |
bad_typeid | 由typeid 丟擲 |
bad_function_call | 由空function 物件丟擲 |
bad_weak_ptr | 由shared_ptr 在傳遞了錯誤的weak_ptr 時丟擲 |
exception
,標頭檔案<exception>
定義了兩個通用的異常型別,可以被自定義異常繼承以報告錯誤。exception | 描述 |
---|---|
logic_error | 與程式內部邏輯相關的錯誤 |
runtime_error | 執行時檢測到的錯誤 |
|
|
bad_alloc
。因為bad_alloc
派生自標準基類exception
,所以它可以被捕獲(透過引用捕獲,捕獲所有相關類)。![]() 型別轉換 | ![]() 目錄 | ![]() 預處理器指令 |