C++中的异常处理

C++异常处理

异常是程序在执行期间产生的问题。

C++ 异常是指在程序运行时发生的特殊情况。

异常提供了一种转移程序控制权的方式。

C++ 异常处理涉及到三个关键字:try、catch、throw

throw:当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。

catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。

try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

如果有一个块抛出一个异常,捕获异常的方法会使用 trycatch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。使用 try/catch 语句的语法如下所示:

 

 1 try
 2 {
 3    // 保护代码
 4 }catch( ExceptionName e1 )
 5 {
 6    // catch 块
 7 }catch( ExceptionName e2 )
 8 {
 9    // catch 块
10 }catch( ExceptionName eN )

 

如果 try 块在不同的情境下会抛出不同的异常,这个时候可以尝试罗列多个 catch 语句,用于捕获不同类型的异常。

抛出异常

使用 throw 语句在代码块中的任何地方抛出异常。throw 语句的操作数可以是任意的表达式,表达式的结果的类型决定了抛出的异常的类型。

以下是尝试除以零时抛出异常的实例:

1 double division(int a, int b)
2 {
3    if( b == 0 )
4    {
5       throw "Division by zero condition!";
6    }
7    return (a/b);
8 }

捕获异常

catch 块跟在 try 块后面,用于捕获异常。您可以指定想要捕捉的异常类型,这是由 catch 关键字后的括号内的异常声明决定的。

1 try
2 {
3    // 保护代码
4 }catch( ExceptionName e )
5 {
6   // 处理 ExceptionName 异常的代码
7 }

上面的代码会捕获一个类型为 ExceptionName 的异常。如果您想让 catch 块能够处理 try 块抛出的任何类型的异常,则必须在异常声明的括号内使用省略号 ...,如下所示:

1 try
2 {
3    // 保护代码
4 }catch(...)
5 {
6   // 能处理任何异常的代码
7 }

下面是一个实例,抛出一个除以零的异常,并在 catch 块中捕获该异常。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 double division(int a, int b)
 5 {
 6    if( b == 0 )
 7    {
 8       throw "Division by zero condition!";
 9    }
10    return (a/b);
11 }
12 
13 int main ()
14 {
15    int x = 50;
16    int y = 0;
17    double z = 0;
18  
19    try {
20      z = division(x, y);
21      cout << z << endl;
22    }catch (const char* msg) {
23      cerr << msg << endl;
24    }
25 
26    return 0;
27 }
View Code

 

 

 

posted @ 2017-02-10 14:23  Blex  阅读(153)  评论(0)    收藏  举报