C++ 异常处理

             

  • 本词条缺少预备知识,初学者可能会遇到困难.

   在初学编程时,遇到错误我们往往就直接用 exit() 终止程序.但有时候我们不希望程序终止,而是希望程序自行对错误进行一定的处理.C 语言的常见办法是把函数的返回值(通常是整型)作为错误代码,0 代表成功,其他值对应不同类型的错误.然而函数调用是重重嵌套的,将错误代码层层传递是一件很麻烦的事情,另外,把错误处理和函数调用的语法分离开也可以使代码的结构更明显.

   在 C++ 中有专门的异常处理机制,一般使用 throw(抛出某种类型的错误), try(检测某段代码的运行)和 catch(处理某种类型的错误)三个关键词完成.来看一个简单的例子.

#include <iostream>
#include <string>
using namespace std;

struct err_info { string where, what;};

void fun2()
{
	err_info e;
	e.where = "fun2()"; e.what = "something wrong!";
	throw e;
}

void fun1() { fun2(); }

int main () {
	try { fun1(); }
	catch (err_info e) {
		cout << "where: " << e.where << endl;
		cout << "what: " << e.what << endl; 
	}
}
程序中 main() 调用 fun1()fun1() 接着调用 fun2(),而 fun2() 必然会出现一个异常,抛出了一个类型为 err_info 的对象 e.这时无论 fun2() 是否运行完成都会终止,并把 e 传给 fun1(),而 fun1() 并没有处理这个异常的代码,所以 fun1() 同样也终止运行,并把 e 回传给 main().由于 main() 中存在处理 err_info 类型错误的代码(catch (err_info e)),所以就会执行相应的错误处理.

致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择会员制,大量广告,内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证网站能在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

广告位

投放详情

         

© 小时科技 保留一切权利