未捕获的异常
来源:互联网 发布:软件开源有什么用 编辑:程序博客网 时间:2024/06/11 18:53
现在,你应该有怎样的例外工作合理的想法。在这节课中,我们将覆盖更多的一些有趣的例外情况。
未捕获的异常
在过去的几个例子,有相当多的情况下,函数假定其调用者(或另一个函数在调用堆栈)处理的例外。在下面的例子中,假设有人会mysqrt()处理异常,但如果没有人把究竟发生了什么?
这是我们的平方根程序再次,减去试块在main():
12345678910111213141516171819202122#include "math.h" // for sqrt() functionusing namespace std; // A modular square root functiondouble MySqrt(double dX){ // If the user entered a negative number, this is an error condition if (dX < 0.0) throw "Can not take sqrt of negative number"; // throw exception of type char* return sqrt(dX);} int main(){ cout << "Enter a number: "; double dX; cin >> dX; // Look ma, no exception handler! cout << "The sqrt of " << dX << " is " << MySqrt(dX) << endl;}
现在,让我们说,用户输入的4,和mysqrt(- 4)提出了一个例外。mysqrt()不处理异常,所以程序堆栈的减少及控制返回到main()。但没有异常处理程序,在这里,所以main()终止。在这一点上,我们就终止了我们的应用!
当main()终止与未处理的异常,操作系统会通知你,已发生未处理的异常错误。它是如何依赖于操作系统,但可能包括打印一个错误信息,弹出错误对话框,或简单的崩溃。一些操作系统是比别人少优雅。这通常是你想要完全避免!
抓住所有处理程序
现在,我们发现自己在一个condundrum:函数可以把任何数据类型的例外,如果没有捕获到异常,它会传播到你的程序的顶部,使其终止。因为不知道如何调用功能,甚至实现它是可能的,我们如何才能避免这种情况的发生?
幸运的是,C + +为我们提供了一个机制来捕获所有异常类型。这是被称为一个包罗万象的处理程序。一个捕获所有处理器的工作就像一个正常的CATCH块,除了可以用一种特定类型的捕捉,利用椭圆算子(……)作为型抓。如果你记得的教训7.14,椭圆和为什么要避开他们,椭圆以前用来传递任何类型的一个函数的参数。在这种情况下,他们所代表的任何数据类型的例外。这是一个简单的例子:
123456789101112try{ throw 5; // throw an int exception}catch (double dX){ cout << "We caught an exception of type double: " << dX << endl;}catch (...) // catch-all handler{ cout << "We caught an exception of an undetermined type" << endl;}
0 0
- 未捕获的异常
- 捕获程序中未捕获的异常
- 如何捕获未捕获的异常
- [Android]如何捕获未捕获的异常
- 未捕获异常的处理
- 未捕获的异常 'NSInternalInconsistencyException'
- C++ 未捕获的异常
- .Net 下未捕获异常的处理
- .Net 下未捕获异常的处理
- .Net 下未捕获异常的处理
- .Net 下未捕获异常的处理
- GWT 类的未捕获异常例子
- 未捕获和意外的异常处理
- android未捕获异常的处理
- Android未捕获异常的处理
- android未捕获异常的处理方法
- 关于未捕获异常的处理(WPF)
- winForm:面对未捕获的异常时
- 63_动态分配函数
- hdu3038How Many Answers Are Wrong
- 探寻C++最快的读取文件的方案
- hdu 2502 月之数
- java 图片压缩、缩放
- 未捕获的异常
- 构造方法和方法重载
- 关于vs2008 和 vs2010 工程常在断点调试的时候卡死(卸了输入法即解决了问题)
- 64_常用时间函数
- poj1182食物链
- 65_转换函数
- 型的异常
- 《Swift Programming Language 》——可选链(Optional Chaining)
- YUV