欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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++中的异常处理教程(上)

实验: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)一次

异常处理的匹配规则:

C++中的异常处理教程(上)

编程实验:异常类型匹配

#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语句 异常处理必须严格匹配,不进行任何的类型转换