C++ 内置了异常处理的语法元素 try...catch...ios
- try 语句处理正常代码逻辑
- catch 语句处理异常代码逻辑
- try 语句中的异常由对应的 catch 语句处理
try { double r = divide(1, 0); } catch (...) { cout << "Divided by zero ..." << endl; }
- C++ 经过 throw 语句抛出异常
double divide(double a, double b) { const double delta = 0.00000000001; double ret = 0; if (!((-delta < b) && (b < delta))) { ret = a / b; } else { throw 0; // 产生除 0 异常 } return ret; }
C++ 异常处理分析编程
throw 抛出的异常必须被 catch 处理ide
- 当前函数可以处理异常,程序继续往下执行
- 当前函数没法处理,则函数中止执行,并返回
未被处理的异常会沿着函数调用栈向上传播,直到被处理为止,不然程序将中止执行。函数
编程实验:C++异常处理初探spa
#include <iostream> using namespace std; double divide(double a, double b) { const double delta = 0.00000000001; double ret = 0; if (!((-delta < b) && (b < delta))) { ret = a / b; } else { throw 0; // 产生除 0 异常 } return ret; } int main() { cout << "main() begin" << endl; try { double r = divide(1, 0); cout << r << endl; } catch(...) { cout << "Divided by zero ..." << endl; } cout << "main() end" << endl; return 0; }
输出:code
main() begin Divided by zero ... main() end
同一个 try 语句能够跟上多个 catch 语句blog
- catch 语句能够定义具体处理的异常类型
- 不一样异常的类型由不一样的 catch 语句负责处理
- try 语句中能够抛出任何类型的异常
- 任何异常只能被捕获(catch)一次
- 异常处理的匹配规则
编程实验:异常类型匹配it
#include <iostream> using namespace std; void Demo1() { 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 "D.T.Software"; } int main() { cout << "main() begin" << endl; Demo1(); try { Demo2(); } catch (char *c) { cout << "catch (char *c)" << endl; } catch (const char *cc) { cout << "catch (const char *cc)" << endl; } catch (...) { cout << "catch (...)" << endl; } cout << "main() end" << endl; return 0; }
小结io
- C++ 中直接支持异常处理的概念
- try...catch... 是C++中异常处理的专用语句
- try 语句处理正常代码逻辑,catch 语句处理异常状况
- 同一个 try 语句能够跟上多个 catch 语句
- 异常处理必须严格匹配,不进行任何的类型转换
以上内容整理于狄泰软件学院系列课程,请你们保护原创!class