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; }}

运行结果
C++的异常处理一篇带你了解
文章图片

也可以自己定义异常类来进行处理:
#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; }

C++的异常处理一篇带你了解
文章图片


三、抛出异常与捕获异常 可以使用 throw 语句在代码块中的任何地方抛出异常。throw 语句的操作数可以是任意的表达式,表达式的结果的类型决定了抛出的异常的类型。
以下是尝试除以零时抛出异常的实例:
#include using 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; }

运行结果
C++的异常处理一篇带你了解
文章图片


四、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++的异常处理一篇带你了解
文章图片

参考:
C++异常处理(try catch throw)完全攻略
c++中try catch的用法
C++ 异常处理

总结 【C++的异常处理一篇带你了解】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

    推荐阅读