Loading

C++异常处理

(1)try语句块内抛出的异常将被catch的参数(形参)捕获,然后在catch语句块内处理此捕获的异常。

(2)当执行一个throw时,跟在throw后面的语句将不再被执行,程序的控制权由此转移到与之匹配的catch语句块。

(3)为了一次性捕获所有异常,可以使用省略号作为异常声明,即catch(...)。此语句可以与任意类型的异常匹配。

 

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 void fun()
 6 {
 7     for (int i = 0; i < 10; ++i)
 8     {
 9         if (i == 6)
10             throw i;
11     }
12 }
13 
14 int main()
15 {
16     try
17     {
18         fun();
19     }
20 
21     catch (int a)      //此处的形参a捕获了抛出的i,将i作为了实参,所以此处输出i的值
22     {
23         cout << a << endl;
24     }
25 
26     return 0;
27 }

 

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 void fun()
 6 {
 7     for (int i = 0; i < 10; ++i)
 8     {
 9         if (i == 6)
10             throw "hello";       //此处的"hello"是字面值常量,为const char*类型,而不是string类型,所以将被s2捕获
11     }                            //若要被string s1捕获,则需要在抛出的时候强制类型转换,即throw string("hello").
12 }
13 
14 int main()
15 {
16     try
17     {
18         fun();
19     }
20     catch (string s1)           //若要被string s1捕获,则需要在抛出的时候强制类型转换,即throw string("hello").
21     {
22         cout << "string" << endl;
23     }
24 
25     catch (const char* s2)
26     {
27         cout << "const char*" << endl;
28     }
29 
30     
31     
32     return 0;
33 }

 

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 void fun()
 6 {
 7     for (int i = 0; i < 10; ++i)
 8     {
 9         if (i == 6)
10             throw 'c';       
11     }                            
12 }
13 
14 int main()
15 {
16     try
17     {
18         fun();
19     }
20    
21 
22     catch (int a)
23     {
24         cout << a << endl;
25     }
26 
27     catch (...)            //由于没有与char类型匹配的cath语句,所以此处匹配此任意类型的catch语句
28     {
29         cout << "..." << endl;
30     }

 

注意: 如果catch(...)与其他几个catch语句一起出现,则catch(...)必须在最后的位置。出现在捕获所有异常语句后面的catch语句将永远不会被匹配。

 

posted @ 2018-07-21 12:53  拾月凄辰  阅读(166)  评论(0编辑  收藏  举报