当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C++中的异常处理教程(上)

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

2018年10月09日  | 移动技术网IT编程  | 我要评论

皇爵四公子,网游之紫风传奇,k360

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网