当前位置:首页 > 通信资讯 > 正文

C++ 异常处理(c++常见异常)

一、背景

程序运行时常会碰到一些异常情况,例如:

  • 做除法的时候除数为 0;
  • 用 new 运算符动态分配空间时,空间不够导致无法分配;
  • 访问数组元素时,下标越界;打开文件读取时,文件不存在。

这些异常情况,如果不能发现并加以处理,很可能会导致程序崩溃。
所谓“处理”,可以是给出错误提示信息,然后让程序沿一条不会出错的路径继续执行;也可能是不得不结束程序,但在结束前做一些必要的工作,如将内存中的数据写入文件、关闭打开的文件、释放动态分配的内存空间等。

二、C++ 异常处理

C++ 引入了异常处理机制。

异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw

  • throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。
  • catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。
  • try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

举个例子

#include <iostream> #include <exception> using namespace std; int main () { try { throw 1; throw "error"; } catch (const char* str) { cout << str << endl; } catch (int i) { cout << i << endl; } }

运行结果

C++ 异常处理(c++常见异常)

也可以自己定义异常类来进行处理:

#include <iostream> #include <exception> using namespace std; //可以自己定义Exception class 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++ 异常处理(c++常见异常)

三、抛出异常与捕获异常

可以使用 throw 语句在代码块中的任何地方抛出异常。throw 语句的操作数可以是任意的表达式,表达式的结果的类型决定了抛出的异常的类型。

以下是尝试除以零时抛出异常的实例:

#include <iostream> 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++ 异常处理(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++常见异常)

参考:

C++异常处理(try catch throw)完全攻略

c++中try catch的用法

C++ 异常处理

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/sinat_31608641/article/details/120257738

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。