博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第六十四课、c++中的异常处理(上)
阅读量:7091 次
发布时间:2019-06-28

本文共 2582 字,大约阅读时间需要 8 分钟。

 一 、c++的异常处理

1、c++内置了异常处理语法元素try...catch

(1)、try语句处理正常逻辑代码

(2)、catch处理异常情况

(3)、try语句中的异常由对应的catch语句处理

2、c++通过throw语句抛出异常信息

 3、c++异常处理分析

(1)、throw抛出的异常必须被catch处理(否则有异常时运行发生错误

A、当前函数能处理异常,程序继续往下执行

B、当前函数无法处理异常,则函数停止执行,并返回

C、未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行

 

#include 
using namespace std;double divide(double a, double b){ const double delta = 0.000000000000001; double ret = 0; if(!((-delta < b) && (b < delta))) { ret = a / b; } else { throw 0; //除0异常时,抛出整数0。 //因异常不在该函数处理,会向外层调用函数传递 } return ret;}int main(){ try //处理正常模块 { //除0时由于divide函数抛出异常,而在函数内部那里又没有处理该异常,因此异常被继续抛出,到了main函数中 //调用函数的代码之处,而在这里异常被try-catch捕获会转向catch语句中,catch处理完后,会直接转向catch //语句的后面"return 0;"去执行。而不是转到调用函数的下一行语句(即cout << "r = " << r << endl;) double r = divide(1, 0); cout << "r = " << r << endl; } catch(...) //处理异常模块,...表示捕获所有类型的异常 { cout << "Divide by zero..." << endl; } return 0;}

4、同一个try语句可以跟上多个catch语句

(1)、catch语句可以定义具体处理的异常类型

(2)、不同类型的异常由不同的catch语句负责处理

(3)、try语句可以抛出任何类型的异常

(4)、catch(...)用于处理所有类型的异常(多个catch语句时,catch(...)要放在最后

(5)、任何类型的异常都只能被捕获(catch)一次

5、异常处理的规则

(1)、异常抛出后,自上而下严格匹配每一个catch语句处理类型

(2)、类型处理匹配时,不进行任何类型转换

 

 

#include 
#include
using namespace std;void Demo1(){ try { throw 1; //1默认为整型,将从上至下严格匹配各catch,即catch(int c) //如果throw 'c',将匹配catch(char c),注意不进行任何的类型转换! } catch(char c) { cout << "catch(char c):" << c << endl; } catch(short c) { cout << "catch(short c):" << c << endl; } catch(double c) { cout << "catch(double c):" << c << endl; } catch(int c) { cout << "catch(int c):" << c << endl; } catch(...) //所有异常,必须放在所有的catch之后,因为是自上而下匹配的 { cout << "catch(...)" << endl; } }void Demo2(){ throw "SantaClaus"; //const char*类型 //throw string("SantaClaus"); //string类型}int main(){ Demo1(); try { Demo2(); } catch(char* s) { cout << "catch(char* s):" << s << endl; } catch(const char* s) { cout << "catch(const char* s):" << s << endl; } catch(string s) { cout << "catch(string s):" << s << endl; } return 0;}/*输出结果:catch(int c):1catch(const char* s):SantaClaus*/

二、小结

(1)、c++直接支持异常处理的概念

(2)、try...catch...是c++中异常处理的专用语句

(3)、try语句处理正常逻辑的代码,catch处理异常情况

(4)、同一个try语句可以跟上多个catch语句

(5)、异常处理必须严格匹配,不进行任何类型的转换

转载于:https://www.cnblogs.com/gui-lin/p/6381604.html

你可能感兴趣的文章
Spring framework3.2整合hibernate4.1报错:No Session found for current thread
查看>>
zqgame《每日一言》
查看>>
前端与后端分离的架构实例(一)
查看>>
LoadRunner性能分析指标解释
查看>>
OC语言类的本质和分类
查看>>
如何实现phpcms v9_4X版本tag的伪静态?
查看>>
w3c标准的selection对象介绍
查看>>
Python-类属性与对象属性之间的关系
查看>>
JavaScript 函数参数传递到底是值传递还是引用传递
查看>>
LeetCode:105_Construct Binary Tree from Preorder and Inorder Traversal | 根据前序和中序遍历构建二叉树 | Medium...
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
转 用 Chrome 运行Android应用
查看>>
编程心得--不积跬步无以至千里
查看>>
thinkphp学习笔记8—命名空间
查看>>
在项目中几个需要学习的知识
查看>>
验证码安全问题汇总
查看>>
LINK : fatal error LNK1104
查看>>
WPF动态加载3D 放大-旋转-平移
查看>>
大型企业的渗透思路
查看>>
strace命令(收集整理,常看常新)
查看>>