文档详情

C++ 异常机制分析.pdf

发布:2017-05-26约8.27千字共10页下载文档
文本预览下载声明
C++ 异常机制分析 阅读目录  C++异常机制概述  throw 关键字  异常对象  catch 关键字  栈展开、RAII  异常机制与构造函数  异常机制与析构函数  noexcept 修饰符与noexcept 操作符  异常处理的性能分析 C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件。异常事件在C++中表示为异 常对象。异常事件发生时,程序使用throw 关键字抛出异常表达式,抛出点称为异常出现点, 由操作系统为程序设置当前异常对象,然后执行程序的当前异常处理代码块,在包含了异常出 现点的最内层的try 块,依次匹配catch 语句中的异常对象(只进行类型匹配,catch 参数有 时在catch 语句中并不会使用到)。若匹配成功,则执行catch 块内的异常处理语句,然后接 着执行try...catch...块之后的代码。如果在当前的try...catch...块内找不到匹配该异常对 象的catch 语句,则由更外层的try...catch...块来处理该异常;如果当前函数内所有的 try...catch...块都不能匹配该异常,则递归回退到调用栈的上一层去处理该异常。如果一直退 到主函数main()都不能处理该异常,则调用系统函数terminate()终止程序。 一个最简单的try...catch...的例子如下所示。我们有个程序用来记班级学生考试成绩,考试成 绩分数的范围在0-100 之间,不在此范围内视为数据异常: int main () { int score=0; while (cin score) { try { if (score 100 || score 0) { throw score; } //将分数写入文件或进行其他操作 } catch (int score) { cerr 你输入的分数数值有问题,请重新输入!; continue; } } } throw 关键字 在上面这个示例中,throw 是个关键字,与抛出表达式构成了throw 语句。其语法为: throw 表达式; throw 语句必须包含在try 块中,也可以是被包含在调用栈的外层函数的try 块中,如: //示例代码:throw 包含在外层函数的try 块中 void registerScore (int score) { if (score 100 || score 0) throw score; //throw 语句被包含在外层main 的try 语句块中 //将分数写入文件或进行其他操作 } int main () { int score=0; while (cin score) { try { registerScore(score); } catch (int score) { cerr 你输入的分数数值有问题,请重新输入!; continue; } } } 执行throw 语句时,throw 表达式将作为对象被复制构造为一个新的对象,称为异常对象。异 常对象放在内存的特殊位置,该位置既不是栈也不是堆,在window 上是放在线程信息块TIB 中。这个构造出来的新对象与本级的try 所对应的catch 语句进行类型匹配,类型匹配的原则 在下面介绍。 在本例中,依据score 构造出来的对象类型为int,与catch(int score)匹配上,程序控制权 转交到catch 的语句块,进行异常处理代码的执行。如果在本函数内与catch 语句的类型匹配 不成功,则在调用栈的外层函数继续匹配,如此递归执行直到匹配上catch 语句,或者直到 main 函数都没匹配上而调用系统函数terminate()终止程序。 当执行一个throw 语句时,跟在th
显示全部
相似文档