C++异常 异常机制
2016-07-14 14:45
281 查看
C++异常是丢程序运行过程中发生的异常情况(例如被0除)的一种响应。异常提供了将控制权从程序的一个部分传递到另一部分的途径。对异常的处理有3个组成部分:
* 引发异常;
* 使用处理程序捕获异常;
* 使用try块。
程序在出现问题时将引发异常。throw语句实际上是跳转,即命令程序跳到另一条语句。throw关键字表示引发异常,紧随其后的值(例如字符串或对象)指出了异常的特征。
程序使用异常处理程序(exception handler)来捕获异常,异常处理程序位于要处理问题的程序中。catch关键字表示捕获异常。处理程序以关键字catch开头,随后是位于括号中的类型声明,它指出了异常处理程序要响应的异常类型;然后一一个用花括号括起的代码块,指出要采取的措施。catch关键字和异常类型用作标签,指出当异常被引发时,程序应跳到这个位置执行。异常处理程序也被称为catch块。
try块标识其中特定的异常可能被激活的代码块,它后面跟一个或多个catch块。try块是由关键字try指示的,关键字try的后面是一个由花括号括起的代码块,表明需要注意这些代码引发的异常。
要了解这3个元素是如何协同工作的,最简单的方法是看一个简短的例子,如下。
error3.cpp
效果:
出现异常时的程序流程:
1.程序在try块中调用hmean()。
2.hmean()引发异常,将从而执行catch块,并将异常字符串付给s。
3.catch块返回到while循环的开始为值。
* 引发异常;
* 使用处理程序捕获异常;
* 使用try块。
程序在出现问题时将引发异常。throw语句实际上是跳转,即命令程序跳到另一条语句。throw关键字表示引发异常,紧随其后的值(例如字符串或对象)指出了异常的特征。
程序使用异常处理程序(exception handler)来捕获异常,异常处理程序位于要处理问题的程序中。catch关键字表示捕获异常。处理程序以关键字catch开头,随后是位于括号中的类型声明,它指出了异常处理程序要响应的异常类型;然后一一个用花括号括起的代码块,指出要采取的措施。catch关键字和异常类型用作标签,指出当异常被引发时,程序应跳到这个位置执行。异常处理程序也被称为catch块。
try块标识其中特定的异常可能被激活的代码块,它后面跟一个或多个catch块。try块是由关键字try指示的,关键字try的后面是一个由花括号括起的代码块,表明需要注意这些代码引发的异常。
要了解这3个元素是如何协同工作的,最简单的方法是看一个简短的例子,如下。
error3.cpp
// error3.cpp -- using an exception #include <iostream> double hmean(double a, double b); int main() { double x, y, z; std::cout << "Enter two numbers: "; while (std::cin >> x >> y) { try { z = hmean(x,y); // start of try block } // end of try block catch (const char * s) // start of exception handler { std::cout << s << std::endl; std::cout << "Enter a new pair of numbers: "; continue; } std::cout << "Harmonic mean of " << x << " and " << y << " is " << z << std::endl; std::cout << "Enter next set of numbers <q to quit>: "; } std::cout << "Bye!\n"; return 0; } double hmean(double a, double b) { if (a == -b) throw "bad hmean() arguments: a = -b not allowed"; return 2.0 * a * b / (a + b); }
效果:
Enter two numbers: 3 6 Harmonic mean of 3 and 6 is 4 Enter next set of numbers <q to quit>: 10 -10 bad hmean() arguments: a = -b not allowed Enter a new pair of numbers: 1 19 Harmonic mean of 1 and 19 is 1.9 Enter next set of numbers <q to quit>: q Bye!
出现异常时的程序流程:
1.程序在try块中调用hmean()。
2.hmean()引发异常,将从而执行catch块,并将异常字符串付给s。
3.catch块返回到while循环的开始为值。
相关文章推荐
- [LeetCode] 8. String to Integer (atoi)
- Cpp环境【NOIP201307】货车运输
- Power of Three
- NOIP 2013 - Day 1 货车运输 重庆一中高2018级竞赛班第二次测试 2016.7.13 Problem 4
- c/c++二位数组malloc和free
- fgets在循环中使用出错?!
- C++输入输出流
- C++异常 返回错误码
- USACO 月赛 劣质的草 (重庆一中高2018级信息学竞赛测验2) 解题报告
- c语言==字符串的键入,遍历,输出(6)
- 虚函数和纯虚函数的区别
- Power of Four
- C++异常 调用abort()
- C++的四种强制类型转换
- Cpp环境【Usaco 2008】劣草岛屿
- C++模板中的嵌套
- 结构体在c和C++中的区别
- ubuntu升级C++11编写多线程程序
- Reverse Vowels of a String
- 什么是行缓冲?printf输出的条件