C++异常处理入门

先看如下代码

void test02()
{
    int a = 10;
    int b = 0; 
    int c = a / b;

}

当你在main()中调用test02()时,很明显会出现如下错误

int main(){

    test02();

	system("pause");
	return EXIT_SUCCESS;
}

因为除数不能为0,所以执行a/b时就会引发错误,然后程序就自动停止了。有无错误就停止,这到没什么,关键是这种用户体验不是很好,你想一下,当程序运行好好的时候,遇到错误,就弹出这么一个窗口,然后程序就终止了,这对用户体验很不好,为了解决这种问题,C++中引入了异常处理机制,让程序猿能够在代码里处理这种错误。明白了这点之后,我们应该在程序里如何集成这种异常机制呢?

需要try()catch(){} 和throw配合,这是一套操作,请看如下代码

int main(){

	try
	{
		test02();
	}

	catch (...)
	{
		cout << "main函数中 其他类型异常捕获" << endl;
	}

	system("pause");
	return EXIT_SUCCESS;
}

try{ }里面将可能要出错的代码写到这里面来,当里面的代码出错后,那么就会执行catch{ }中的代码。

这时候,你继续编译,然后运行,你会发现它又弹出了下面的错误,好像try...catch并没有用

实际上我们的try...catch没有错,但想要起作用,还需要throw关键字的配合,test02()代码改造如下

void test02()
{
	int a = 10;
	int b = 0; 
	if (b == 0){
		throw 1;
	}
	int c = a / b;
}

代码执行后,会打印如下内容

当b == 0 时,就会执行throw 1,throw 就表示抛出一个错误,然后这个错误由test02所在的catch中处理。这里的1,是我随便写的返回数据类型,该类型会和catch 括号中的类型进行匹配,然后执行对应的代码块中的内容。比如说,我们例子中catch只有1个

(...)这表示任何类型,也就是说,不管你throw 后面跟什么类型,都可以在这里匹配到。

那么我再将try...catch改造为如下

int main(){

	try
	{
		test02();
	}
	catch (int) //如果异常都没有处理
	{
		cout << "main 函数中 int类型异常捕获" << endl;
	}
	catch (...)
	{
		cout << "main函数中 其他类型异常捕获" << endl;
	}

	system("pause");
	return EXIT_SUCCESS;
}

代码执行后,将会打印如下

main 函数中 int类型异常捕获

因为test02()中throw的数据类型是int ,因此它会优先匹配到catch()中的int ,然后执行对应代码块中的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值