C++中的异常处理(上)
2023-09-14 09:12:37 时间
C++内置了异常处理的语法元素try... catch ...
-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.000000000000001; double ret = 0; if( !((-delta < b) && (b < delta)) ) { ret = a / b; } else { throw 0; //产生除0异常 } return ret; }
C++异常处理分析
-throw抛出的异常必须被catch处理
当前函数能够处理异常,程序继续往下执行
当前函数无法处理异常,则函数停止执行,并返回
未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行
当产生异常后,先看function3这个函数有没有能力处理,此时是没有能力处理的。于是function3这个函数就会立即停止执行,并且带着
异常返回function2的调用点,此时function2也没有能力处理,会立刻停止,并且带着这个异常返回到它的调用点function1中。
#include <iostream> #include <string> 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; } return ret; } int main(int argc, char *argv[]) { try { double r = divide(1, 0); cout << "r = " << r << endl; } catch(...) { cout << "Divided by zero..." << endl; } return 0; }
同一个try语句可以跟上多个catch语句
-catch语句可以定义具体处理的异常类型
-不同类型的异常由不同的catch语句具体负责
-try语句中可以抛出任何类型的异常
-catch(...)用于处理所有类型的异常
-任何异常都只能被捕获(catch)一次
异常类型匹配
#include <iostream> #include <string> using namespace std; void Demo1() { try { throw 'c'; } catch(char c) { cout << "catch(char c)" << endl; } catch(short c) { cout << "catch(short c)" << endl; } catch(double c) { cout << "catch(double c)" << endl; } catch(...) { cout << "catch(...)" << endl; } } void Demo2() { throw string("D.T.Software"); } int main(int argc, char *argv[]) { Demo1(); try { Demo2(); } catch(char* s) { cout << "catch(char *s)" << endl; } catch(const char* cs) { cout << "catch(const char *cs)" << endl; } catch(string ss) { cout << "catch(string ss)" << endl; } return 0; }
小结:
C++中直接支持异常处理的概念
try...catch...是C++中异常处理的专用语句
try语句处理正常代码逻辑,catch语句处理异常情况
同一个try语句可以跟上多个catch语句
异常处理必须严格匹配,不进行任何的类型转换
相关文章
- 第二届蓝桥杯C++B组国(决)赛真题
- 【IOS-COCOS2D游戏开发之十二】浅析使用C++/C/OC进行IOS游戏混编出现“FAILED WITH EXIT”问题与小结;
- [C/C++] VS 2015 C++ 插件
- VC++数据库开发技术的比较
- 成功解决VS编译环境下C++语言出现的异常提示:烫烫烫烫烫烫烫烫烫烫
- C++数据结构--异常类与顶层父类的实现
- C++ list总结
- C++每日扎心结构体之初始化导致的一次异常崩溃。
- 关于C++的异常处理,下列说法正确的有?
- C++ 异常机制
- C++ 单例模式的模板实现
- C++使用技巧(二十七):回顾函数指针参数、数组参数、结构体函数参数
- C++打开的文件一定要用close()方法关闭
- C++之友元函数与友元类使用(一百一二十一)
- 分析C++软件异常需要掌握的汇编知识汇总
- Windows和Linux下排查C++软件异常的常用调试器与内存检测工具详细介绍
- C++ GDI资源泄漏导致的程序异常的解析
- C++ ofstream学习
- 标准的 C++ 由三个重要部分组成
- 演练:创建和使用自己的动态链接库 (C++)
- 队列类(C++)
- 【C++ 科学计算】C++ 一维数据插值算法
- 【C++ 科学计算】C++ 矩阵累加(求和)所有元素
- 【C++ 科学计算】redis-plus-plus:安装用C ++编写的Redis客户端
- 学习C++:C++基础(四)类型转换、C++异常、文件读写
- C++ 异常
- C++代码优化方案(二)