C/C++基础知识复习(20)

1) C++ 中的异常处理机制

C++ 中的异常处理机制通过 trycatchthrow 关键字来实现。这三部分共同工作,以便在程序发生错误时进行处理,确保程序的健壮性。

  • throw :用于抛出异常。当某个函数中发生错误时,使用 throw 抛出一个异常对象,表示发生了异常情况。
  • try :用于标记一个可能发生异常的代码块。在 try 块中,程序执行的代码如果发生异常,程序会跳转到对应的 catch 块处理异常。
  • catch :用于捕捉并处理异常。当异常被抛出时,程序会跳转到匹配的 catch 块,并执行其中的代码。

示例

cpp 复制代码
#include <iostream> 
#include <stdexcept> // 包含标准异常类 
void mayThrowException(int x) {
 if (x == 0) 
{ 
throw std::invalid_argument("x不能为零"); 
} 
std::cout << "x的值是: " << x << std::endl; 
} 
int main() 
{
 try { mayThrowException(0); 
} catch (const std::exception& e) { 
std::cout << "发生异常: " << e.what() << std::endl; 
} 
return 0; 
}

在这个例子中,当 mayThrowException(0) 被调用时,throw 抛出一个异常,并被 catch 块捕获和处理。

2) 什么情况下应该使用异常处理?异常处理的优缺点是什么?

使用异常处理的情况:
  • 错误不可避免或不可预见:如果程序的执行过程中可能出现无法预料的错误或异常情况(如网络连接失败、文件打开失败等),可以通过异常处理来管理这些错误,而不是依赖返回值或状态码。
  • 错误处理与正常流程分离:当错误处理逻辑复杂,使用异常处理可以将错误逻辑从正常程序流程中分离开来,提高代码可读性和可维护性。
  • 不需要手动清理资源 :异常处理可以自动进行资源管理,尤其是在 C++ 中,try-catch 机制和 RAII(资源获取即初始化)结合使用时,异常发生时资源可以自动释放。
异常处理的优点:
  • 清晰的错误处理:可以集中处理错误逻辑,使程序更具可读性和结构化。
  • 代码简洁:减少了手动错误检查的代码,例如,避免了通过返回错误码来手动处理错误。
  • 资源管理 :通过 try-catch 块和智能指针等机制,资源可以在异常发生时自动释放,减少内存泄漏等问题。
异常处理的缺点:
  • 性能开销:异常处理有一定的性能开销,尤其是在抛出和捕捉异常时。虽然 C++ 编译器会优化异常处理,但频繁的异常抛出和捕获依然会影响程序的性能。
  • 不适合所有类型的错误:对于一些不可预见的错误(如内存分配失败),异常处理可能会过于复杂,且不适合快速恢复。
  • 难以调试:由于异常抛出时程序的控制流会跳转,可能导致调试更加困难,特别是在大规模系统中。

总的来说,异常处理适用于那些需要集中错误处理和资源管理的情况,但应避免滥用,尤其是在性能要求高的场合。

相关推荐
LawrenceLan4 分钟前
Flutter 零基础入门(十一):空安全(Null Safety)基础
开发语言·flutter·dart
txinyu的博客29 分钟前
解析业务层的key冲突问题
开发语言·c++·分布式
码不停蹄Zzz35 分钟前
C语言第1章
c语言·开发语言
行者961 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon1 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio2 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词2 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派2 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
yeziyfx3 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie1145141913 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式