C++异常处理

C++异常处理


程序错误大致有三种:

  • 语法错误

    编译链接阶段可以发现
    
  • 逻辑错误

    编写程序逻辑错误,达不到预期的目标,通过调试排查解决
    
  • 运行时错误

    程序编译链接解决都没有出错,语法完全符合规则,
    但是在运行时候程序出错,严重的终止程序运行(程序崩溃)
    

C++异常处理机制

为捕获解决运行时错误而诞生,给程序复活的机会,至少告诉用户发生了什么严重故障再终止程序

异常类头文件:
 #include <exception>   //包含异常类头文件
捕获异常语法:
try{
	<code block A>   //可能产生异常的语句
}catch(exception type var){
    <code block B>   //处理异常的语句
}

尝试(try)执行code block A代码,没有异常正常执行,有异常的话就会捕获(catch)异常,执行code block B异常处理代码

  • exception type指明了异常类型即指定了对应catch语句能处理什么类型异常。异常类型可以是C++支持的所有数据类型。

  • exception是异常类,C++语言本身及其标准库产生的异常都是exception类的子类,为标准异常。抛出异常时,会创建一个exception类或子类对象。

  • var 类似函数的形参,存放异常信息,抛出的异常数据类型和var 类型匹配上才会执行相应的catch语句

    捕获所有标准异常:

    try{
        //可能抛出异常的语句
    }catch(exception &e){
        //处理异常的语句
    }
    
    多级catch:
    try{
    	<code block A>   //可能产生异常的语句
    }catch(exception type var){
        <code block B>   //处理异常的语句
    }catch(exception type1 var){
    	  <code block C>   //处理异常的语句
    }catch(exception type2 var){
    	  <code block D>   //处理异常的语句
    }
    

    从上往下逐级执行,异常信息类型和哪个catch里面的参数一致就执行哪个捕获语句

一般用法:在可能产生异常的代码加上try和catch,常见的异常有除数为0,数据越界,内存分配失败等。

抛出异常

C++使用throw关键字来抛出异常,在执行到throw语句后,throw语句后面的代码没有执行的机会

throw语句必须在try语句中或者在try语句调用的函数中执行。

void test_exception(void)
{
	try{
		throw "this is a exception!";   //抛出异常
	}catch(const char* e){              //捕获异常
		cout << e << endl;	
	}
}

int main(void)
{
	test_exception();

	return 0;
}
除数为0异常:
int div_exception_test(int x, int y)
{
	int result;
	try{
		result = x / y;
	}catch(...){
		cout << "除数不能为0" << endl;
	}
	return result;
}

int main(void)
{
	printf("result = %d", div_exception_test(20, 0));   //有了try catch,计时除数为0,程序也不会崩溃。
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欲盖弥彰1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值