-c++内置了异常处理的语法元素try...catch...
-try语句处理正常代码逻辑
-catch语句处理异常情况
-try语句中的异常由对应的catch语句处理
try { double c = divide(1, 0); cout << "c = " << c << endl; } catch(...) { cout << "Divided by zero..." << endl; }
-c++通过throw语句抛出异常信息
double divide(double a, double b) { const double delta = 0.000000000000001; double ret = 0; if( !((-delta < b) && (b < delta)) ) { ret = a / b; } else { throw 0; // 产生除 0 异常 } return ret; }
——c++异常处理分析
- throw抛出的异常必须被catch处理
-当前函数能够处理异常,程序继续往下执行
-当前函数无法处理异常,则函数停止执行,并返回
fuc3抛出异常,如果fuc3中没有异常处理,则异常传递到fuc2,如果fuc2有异常处理,程序返回继续执行,如果没有异常处理,继续返回fuc3,依次类推,如果最后返回到main函数都还没有处理异常,程序停止运行。
#include <iostream> using namespace std; double divide(double a, double b) { const double delta = 0.000000000000001; double ret = 0; if( !((-delta < b) && (b < delta)) ) { ret = a / b; } else { throw 0; // 产生除 0 异常 } return ret; } void Demo1() { //catch捕获,没有类型转换,必须完全匹配 try { throw 'c'; } catch(int i) { cout << "catch(int i)" << endl; } catch(double d) { cout << "catch(double d)" << endl; } catch(char c) { cout << "catch(char c)" << endl; } } void Demo2() { throw 0.0001; // "D.T.Software"; // const char* } int main() { cout << "main() begin" << endl; //没有异常,不处理 try { double c = divide(1, 1); cout << "c = " << c << endl; } catch(...) { cout << "Divided by zero..." << endl; } Demo1(); try { Demo2(); } catch(char* c) { cout << "catch(char* c)" << endl; } catch(const char* cc) { cout << "catch(char* cc)" << endl; } catch(...) { cout << "catch(...)" << endl; } cout << "main() end" << endl; return 0; }