在C++中,異常處理包括:
· throw表達式(throw expression) 異常檢測部分使用throw表達式來表示它遇到了無法處理的問題。throw表達式拋出一個異常並把控制權轉移到能處理該異常的最近的catch子句。
· try語句塊(try block) 異常處理部分使用try語句塊處理異常。try關鍵字后跟着一個塊和多個catch子句。如果try語句塊的代碼throw了異常並且其中一個catch子句匹配該異常類型,則異常被該catch子句處理,否則,異常將由外圍try(try語句塊可以調用包含另一個try語句塊的函數) 處理,或者調用標准庫的terminate函數終止當前程序。
· 一套異常類(exception class) 用於在throw表達式和相關的catch子句之間傳遞異常的具體信息。
if(a != b) throw runtime_error("Data must refer to same value");
上面的代碼就是如果a和b不相等時,就拋出一個異常,該異常是類型runtime_error的對象。拋出異常將終止當前的函數,並把控制權轉移給能處理該異常的代碼。
int a, b; while(cin >> a >> b){ try{ if(a != b) throw runtime_error("Data must refer to same value"); }catch(runtime_error err){ cout << err.what() << "\nTry Again? Enter y or n" << endl; char c; cin >> c; if(!cin || c == 'n') break; } }
上面的代碼中,try語句塊中如果判斷a與b不相等,就拋出一個runtime_error類型的異常,try語句塊后有一個與之相對應的catch語句,那么就會執行該catch語句來處理異常。
what函數返回值是一個指向C風格字符串的const char*。what函數返回的C風格字符串的內容與異常對象的類型有關。如果異常類型有一個字符串初始值,則what返回該字符串。對於其他吳初始值的異常類型來說,what返回的內容由編譯器決定。
關於標准異常
C++標准庫定義了一組類,用於報告標准庫函數遇到的問題。這些異常類也可以在用戶編寫的程序中使用,它們分別定義在4個頭文件中:
· exception頭文件定義了最通用的異常類exception。它只報告異常的發生,不提供任何額外信息。
· stdexcept頭文件定義了幾種常用的異常類。
· new頭文件定義了bad_alloc異常類型。
· type_info頭文件定義了bad_cast異常類型。
以上圖片摘自qingdujun的博客:https://blog.csdn.net/qingdujun/article/details/75195061