C++异常处理详解:从exception到stdexcept

需积分: 7 0 下载量 164 浏览量 更新于2024-09-18 收藏 1KB TXT 举报
"C++ Primer 异常" 在C++编程中,异常处理是程序错误管理的重要组成部分,它允许程序员在程序遇到不可预期的问题时优雅地处理错误,而不是导致程序崩溃。以下是对C++异常处理机制的详细解释: 1. **异常(Exception)的基本概念** 异常是在程序执行过程中发生的一种不正常情况,它可以由运行时错误(如除以零)、逻辑错误或其他编程错误引起。在C++中,异常通过`throw`语句抛出,然后由`catch`块捕获并进行处理。 2. **标准异常(Stdexcept)库** C++标准库提供了一组预定义的异常类,它们位于`<stdexcept>`头文件中。这些异常包括: - `runtime_error`: 一个基类,用于表示运行时错误,如算法错误。 - `range_error`: 用于表示数值范围错误,如数组越界。 - `overflow_error`: 当计算结果超出可表示范围时抛出。 - `underflow_error`: 当计算结果低于可表示范围的最小值时抛出。 - `logic_error`: 用于表示程序逻辑错误,如无效的操作或条件。 3. **new操作符与`bad_alloc`异常** 在动态内存分配过程中,如果`new`运算符无法为对象分配足够的内存,它会抛出`std::bad_alloc`异常。这通常发生在内存耗尽或请求内存过大时。 4. **类型转换异常(Type Info 和 Bad Cast)** `type_info`类提供了关于类型的元数据,主要用于RTTI(运行时类型信息),当尝试执行不合法的类型转换时,会抛出`bad_cast`异常。 下面的代码示例展示了如何使用`try-catch`结构来处理异常: ```cpp while (true) { try { // 执行会添加两个销售项目的代码 // 如果添加失败,代码将抛出一个runtime_error异常 } catch (runtime_error &err) { cout << err.what(); // 输出异常信息 char c; cin >> c; if (cin && c == 'n') break; // 用户输入'n'退出循环 } } // 宏定义用于调试 __FILE__: 提供当前源文件的名称,常用于调试信息。 __LINE__: 提供当前源代码行号,帮助定位异常发生的具体位置。 __TIME__: 提供源文件编译时的时间,对于记录编译信息有用。 __DATE__: 提供源文件编译日期,同样用于调试和版本控制。 ``` 通过使用这些工具和机制,C++程序员可以编写更加健壮和容错的代码,确保在出现问题时能够及时捕获并处理异常,提高程序的稳定性和可靠性。