C++中的异常处理教程(上)
程序员文章站
2023-08-31 19:20:24
一、c++异常处理
c++内置了异常处理的语法元素try..catch...
try语句处理正常代码逻辑 catch语句处理异常情况 try语句中的异常由对应的catch语句处理
try{...
一、c++异常处理
c++内置了异常处理的语法元素try..catch...
try语句处理正常代码逻辑 catch语句处理异常情况 try语句中的异常由对应的catch语句处理
try{ double r = pide(1,0); } catch(...){ cout << "divide by zero.." << endl; }
c++通过throw语句抛出异常信息
double pide(double a ,double b){ const double delta = 0.00000000000001; double ret = 0; if(!((-delta < b) && (b < delta))){ ret = a / b; } else{ throw 0; //产生除0异常 } return ret; }
c++异常处理分析
throw抛出的异常必须被catch处理
当前函数能够处理异常,程序继续往下执行 当前函数无法处理异常,则函数停止执行,并返回
未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行。
实验:c++异常处理初探
#include using namespace std; double pide(double a,double b){ const double delta = 0.000000000000001; double ret = 0; if(!((-delta < b) && (b < delta))){ ret = a / b; } else{ throw 0; } return ret; } int main(int argc,char* argv[]){ try{ double r = pide(1,0); cout << "r = " << r << endl; } catch(...){ cout << "divide by zero..." << endl; } return 0; }
打印结果:
divide by zero...
同一个try语句可以跟上多个catch语句
catch语句可以定义具体处理的异常类型 不同类型的异常由不同的catch语句负责处理 try语句中可以抛出任何类型的异常 catch(...)用于处理所有类型的异常 任何异常都只能被捕获(catch)一次
异常处理的匹配规则:
编程实验:异常类型匹配
#include using namespace std; void demo1(){ try{ throw 'c'; } catch(char c){ cout << "catch(char c)" << endl; } catch(short c){ cout << "catch(short c)" << endl; } catch(double c){ cout << "catch(double c)" << endl; } catch(...){ cout << "catch(...)" << endl; } } void demo2(){ throw string("d.t.software"); //throw ("d.t.software"); } int main(){ demo1(); try{ demo2(); } catch(char* s){ cout << "catch(char *s)" << endl; } catch(const char* cs){ //对应第24行的打印 cout << "catch(const char *cs)" << endl; } catch(string ss){ cout << "catch(string ss)" << endl; } return 0; }
打印结果:
catch(char c) catch(string ss)
二、总结
c++中直接支持异常处理的概念 try...catch...是c++中异常处理的专用语句 try语句处理正常代码逻辑,catch语句处理异常情况 同一个try语句可以跟上多个catch语句 异常处理必须严格匹配,不进行任何的类型转换
推荐阅读