C++的异常处理一篇带你了解
目录
- 一、背景
- 二、C++ 异常处理
- 三、抛出异常与捕获异常
- 四、catch(...)的作用
- 总结
一、背景 程序运行时常会碰到一些异常情况,例如:
- 做除法的时候除数为 0;
- 用 new 运算符动态分配空间时,空间不够导致无法分配;
- 访问数组元素时,下标越界;打开文件读取时,文件不存在。
所谓“处理”,可以是给出错误提示信息,然后让程序沿一条不会出错的路径继续执行;也可能是不得不结束程序,但在结束前做一些必要的工作,如将内存中的数据写入文件、关闭打开的文件、释放动态分配的内存空间等。
二、C++ 异常处理 C++ 引入了异常处理机制。
异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw。
- throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。
- catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。
- try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。
#include#include using namespace std; int main () {try{throw 1; throw "error"; }catch (const char* str){cout << str << endl; }catch (int i){cout << i << endl; }}
运行结果
文章图片
也可以自己定义异常类来进行处理:
#include#include using namespace std; //可以自己定义Exceptionclass myexception: public exception{ virtual const char* what() const throw() {return "My exception happened"; }}myex; int main () { try {if(true)//如果,则抛出异常;throw myex; } catch (exception& e) {cout << e.what() << endl; } return 0; }
文章图片
三、抛出异常与捕获异常 可以使用 throw 语句在代码块中的任何地方抛出异常。throw 语句的操作数可以是任意的表达式,表达式的结果的类型决定了抛出的异常的类型。
以下是尝试除以零时抛出异常的实例:
#includeusing namespace std; double division(int a, int b){if( b == 0 ){throw "Division by zero condition!"; }return (a/b); }int main (){int x = 50; int y = 0; double z = 0; try {z = division(x, y); cout << z << endl; }catch (const char* msg) {cerr << msg << endl; }return 0; }
运行结果
文章图片
四、catch(...)的作用 catch(…)能够捕获多种数据类型的异常对象,所以它提供给程序员一种对异常对象更好的控制手段,使开发的软件系统有很好的可靠性。因此一个比较有经验的程序员通常会这样组织编写它的代码模块,如下:
void Func(){try{// 这里的程序代码完成真正复杂的计算工作,这些代码在执行过程中// 有可能抛出DataType1、DataType2和DataType3类型的异常对象。}catch(DataType1& d1){}catch(DataType2& d2){}catch(DataType3& d3){}catch(…){}}
例子
double division(int a, int b) {if (b == 0) {throw "Division by zero condition!"; }return (a / b); } int main() {try{int res = division(10,0); }catch (...){cout << " * ********" << endl; }return 0; }
文章图片
参考:
C++异常处理(try catch throw)完全攻略
c++中try catch的用法
C++ 异常处理
总结 【C++的异常处理一篇带你了解】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量