C++ 引入了異常處理機制。其基本思想是:函數 A 在執行過程中發現異常時可以不加處理,而只是“拋出一個異常”給 A 的調用者,假定為函數 B。
拋出異常而不加處理會導致函數 A 立即中止,在這種情況下,函數 B 可以選擇捕獲 A 拋出的異常進行處理,也可以選擇置之不理。如果置之不理,這個異常就會被拋給 B 的調用者,以此類推。
如果一層層的函數都不處理異常,異常最終會被拋給最外層的 main 函數。main 函數應該處理異常。如果main函數也不處理異常,那么程序就會立即異常地中止。
try...catch 語句的執行過程是:
- 執行 try 塊中的語句,如果執行的過程中沒有異常拋出,那么執行完后就執行最后一個 catch 塊后面的語句,所有 catch 塊中的語句都不會被執行;
- 如果 try 塊執行的過程中拋出了異常,那么拋出異常后立即跳轉到第一個“異常類型”和拋出的異常類型匹配的 catch 塊中執行(稱作異常被該 catch 塊“捕獲”),執行完后再跳轉到最后一個 catch 塊后面繼續執行。
#include <iostream>
using namespace std;
int main()
{double m ,n;cin >> m >> n;try {cout << "before dividing." << endl;if( n == 0)throw -1; //拋出int類型異常elsecout << m / n << endl;cout << "after dividing." << endl;}catch(double d) {cout << "catch(double) " << d << endl;}catch(int e) {cout << "catch(int) " << e << endl;}cout << "finished" << endl;return 0;
}