C++异常处理
异常处理是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况
异常处理的目的:通过异常处理,我们可以对用户在程序中的非法操作进行控制和提示,以防程序崩溃;但是异常处理没有普通方法调用速度快,过度的错误处理会影响应用程序运行的效率
#include <iostream>
using namespace std;
void func(float a,float b,float &c)
{
c=a/b;
}
int main() {
float a=10,b=0,c=0;
func(a,b,c);
cout<<"hello world"<<endl;
return 0;
}
注意:b是float类型,不是一个精确值,是一个接近0的近似值,所以程序并没有中断
#include <iostream>
using namespace std;
void func(float a,float b,float &c)
{
if(b>-0.00001&&b<0.00001){
return ;
}
c=a/b;
}
int main() {
float a=10,b=0,c=0;
func(a,b,c);
cout<<"hello world"<<endl;
return 0;
}
C++异常处理方式
C++异常处理主要使用三个关键字:try、throw和catch
try{
包含可能抛出异常的语句;
}catch(类型名[形参名]){
处理异常的语句;
}
- 满足某个条件时显式抛出一个异常
- 使用catch块来匹配抛出的异常类型
#include <iostream>
using namespace std;
void func(float a,float b,float &c)
{
// 显式抛出异常
if(b>-0.00001&&b<0.00001)
throw "error b=0";
c=a/b;
}
int main() {
float a=10,b=0,c=0;
try{
func(a,b,c);
}catch(const char *error){
cout<<error<<endl;
}catch(int error){
cout<<error<<endl;
}catch(...){
cout<<"可以捕获任何一个异常"<<endl;
}
// 按照顺序捕获异常,匹配了之后就不会再向下匹配
// 一般匹配程度高的catch块放在前面,而...的catch块是“保底”的,防止有些异常没有匹配到catch块,通用性最强但是针对性最差,所以应该放在所有catch块的后面
printf("hello world");
return 0;
}
异常处理执行顺序:抛出异常、捕获异常、处理异常