当前位置:主页 > 软件编程 > C代码 >

一篇文章带你入门C++的异常处理

时间:2021-12-11 09:12:50 | 栏目:C代码 | 点击:

一、背景

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

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

二、C++ 异常处理

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

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

举个例子

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

运行结果

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

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

三、抛出异常与捕获异常

可以使用 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;
}

运行结果

四、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++ 异常处理

总结

您可能感兴趣的文章:

相关文章