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,所以它可以被捕獲(透過引用捕獲,捕獲所有相關類)。型別轉換 | 目錄 | 預處理器指令 |