C++异常是丢程序运行过程中发生的异常情况(例如被0除)的一种响应。异常提供了将控制权从程序的一个部分传递到另一部分的途径。对异常的处理有3个组成部分:
* 引发异常;
* 使用处理程序捕获异常;
* 使用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循环的开始为值。
时间: 2024-10-14 09:05:53