【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. }


相关文章
|
2月前
|
安全 程序员 编译器
【C++】异常
C++异常处理机制允许在程序运行时出现错误时,通过`try`、`catch`和`throw`关键字将错误信息传递回调用栈,进行异常处理。它支持异常的重新抛出、自定义异常体系以及标准库提供的异常类层次结构,如`std::exception`及其派生类。异常处理提高了代码的健壮性和可维护性,但也带来了性能开销和代码复杂性等问题。合理使用异常机制,可以有效提升程序的稳定性和安全性。
54 3
|
2月前
|
存储 安全 编译器
【c++】深入理解别名机制--引用
本文介绍了C++中的引用概念及其定义、特性、实用性和与指针的区别。引用是C++中的一种别名机制,通过引用可以实现类似于指针的功能,但更安全、简洁。文章详细解释了引用的定义方式、引用传参和返回值的应用场景,以及常引用的使用方法。最后,对比了引用和指针的异同,强调了引用在编程中的重要性和优势。
44 1
|
3月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
78 6
|
3月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
96 7
|
8月前
|
安全 C++
C++中的异常处理与错误处理机制
C++中的异常处理与错误处理机制
89 0
|
6月前
|
C++
C++ 异常机制问题之捕获异常的问题如何解决
C++ 异常机制问题之捕获异常的问题如何解决
|
6月前
|
安全 Java 程序员
【C++11】异常知多少
【C++11】异常知多少
58 7
|
5月前
|
安全 Java 程序员
|
8月前
|
缓存 安全 Java
从C语言到C++_35(异常)C++异常的使用+异常体系+异常优缺点(下)
从C语言到C++_35(异常)C++异常的使用+异常体系+异常优缺点
63 7
|
8月前
|
程序员 Linux C语言
从C语言到C++_35(异常)C++异常的使用+异常体系+异常优缺点(上)
从C语言到C++_35(异常)C++异常的使用+异常体系+异常优缺点
48 3