【C++异常机制】

简介: 【C++异常机制】

首先把可能会发生异常的语句放在try语句内,然后通过catch语句接异常,接异常的时候是严格按照类型匹配的(不像函数参数可以进行隐式类型转换)。而抛异常的时候,通过throw语句抛出异常,然后直接转到接收该类型的异常的catch语句处执行,throw后面的语句不再执行,抛出异常的函数后面的语句不再执行(try语句内),这是异常的跨函数特性。异常在接收后也可以不处理继续抛出,但是必须要有接异常,否则程序会挂。

下面通过一个实例分析:

1. #include <iostream>
2. using namespace std;
3. 
4. //可以抛出任何类型异常
5. void TestFunc1(const char* p)
6. {
7.  if (p == NULL)
8.  {
9.    throw 1;
10.   }
11.   else if (!strcmp(p, ""))
12.   {
13.     throw 2;
14.   }
15.   else
16.   {
17.     cout << "the string is : " << p << endl;
18.   }
19. }
20. 
21. //只能抛出以下类型异常 int char 
22. void TestFunc2(const char* p) throw(int, char)
23. {
24.   if (p == NULL)
25.   {
26.     throw '1';
27.   }
28. 
29.   cout << "the string is : " << p << endl;
30. }
31. 
32. //不抛出任何类型异常
33. void TestFunc3(const char* p) throw()
34. {
35.   cout << "the string is : " << p << endl;
36. }
37. 
38. int main()
39. {
40.   char buf1[] = "hello c++";
41.   char* buf2 = NULL;
42.   char buf3[] = "";
43. 
44.   try
45.   {
46.     //TestFunc1(buf2); //这里抛出异常,那么后面都不再执行,这是异常的跨函数特性
47.     //TestFunc1(buf3);
48.     TestFunc2(buf2);
49.     TestFunc3(buf1);
50.   }
51.   catch (int e) //异常严格按照类型进行匹配
52.   {
53.     switch(e)
54.     {
55.     case 1:
56.       cout << "the string is NULL" << endl;
57.       break;
58.     case 2:
59.       cout << "the string is space" << endl;
60.       break;
61.     default:
62.       cout << "do not know" << endl;
63.       break;
64.     }
65.   }
66.   catch (char) //可以只写类型
67.   {
68.     cout << "throw char test" << endl;
69.   }
70.   catch (...)
71.   {
72.     cout << "other err" << endl;
73.   }
74. 
75.   system("pause");
76.   return 0;
77. }


相关文章
|
4月前
|
SQL 安全 程序员
C++:异常
C++:异常
43 7
|
4月前
|
安全 C++
C++中的异常处理与错误处理机制
C++中的异常处理与错误处理机制
45 0
|
4月前
|
小程序 编译器 Linux
C++ 异常原理:以一个小程序为例
作者在调查某个 bug 时涉及到 C++ 异常,借此机会以本文把 C++ 异常机制梳理清楚供大家参考。
|
4月前
|
安全 Java 程序员
【C++】异常 -- 详解
【C++】异常 -- 详解
|
2月前
|
C++
C++ 异常机制问题之捕获异常的问题如何解决
C++ 异常机制问题之捕获异常的问题如何解决
|
2月前
|
安全 Java 程序员
【C++11】异常知多少
【C++11】异常知多少
30 7
|
3月前
|
安全 C++
详细解读c++异常模板复习
详细解读c++异常模板复习
17 0
|
4月前
|
缓存 安全 Java
从C语言到C++_35(异常)C++异常的使用+异常体系+异常优缺点(下)
从C语言到C++_35(异常)C++异常的使用+异常体系+异常优缺点
38 7
|
4月前
|
程序员 Linux C语言
从C语言到C++_35(异常)C++异常的使用+异常体系+异常优缺点(上)
从C语言到C++_35(异常)C++异常的使用+异常体系+异常优缺点
31 3
|
3月前
|
存储 Java 程序员
【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一
【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一
20 0