为什么在 C++ 中使用 try 和 catch()?

2023-11-24

我明白那个try and catch()用于异常处理,以防在某些情况下程序发生错误或崩溃。我也了解它们是如何工作的。但为什么要使用try and catch()?为什么不直接使用if()查找特定案例的语句,如果该案例为真,则确实如此cout << //error code?


异常处理:

  • can be used with constructors and operators that have no opportunity to return a separate error code (they could set the object into some error state - which implies further memory usage - but the client code also has to remember to check for that error state later)
    • 例如:用户定义类型-类X- 支持符号x1 = x2 + x3- 哪里可以返回错误代码?
  • 可以在初始化列表中构造特定的类/结构数据成员时启动 - 避免进一步的数据成员构造,这可能注定会失败或浪费;相比之下,显式错误处理只能在构造函数主体的后面进行
  • 更加隐式——强调代码正常成功的流程,可以使其更加简洁、可读、可维护
  • 分解方式不同——可以在一个地方捕获来自多个地方的异常,这有时会使错误处理代码本身更加简洁、可读、可维护
  • 在错误处理本来会重复的情况下,简洁的好处实际上可以带来更可靠的错误处理
  • 通常使用自己的内存区域,独立于堆栈,用于局部变量、函数参数、保存CPU寄存器和返回地址等;这意味着即使剩余堆栈内存小于异常对象,抛出语句也可以直接在该内存区域中可靠地构造异常对象(尽管实现细节并不受标准保证)
  • 具有不同的性能配置文件,因此在某些情况下两者都可以更快
  • 促进从低级代码到中间代码传播更丰富的错误信息,您可能不“拥有”或希望/能够更改这些代码以传播 C 风格的错误代码,直到进行处理
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 C++ 中使用 try 和 catch()? 的相关文章

随机推荐

  • + 运算符是否对原始类型重载?

    已经重载的运算符 gt 等被多次使用 我想到的一个例子是当我们添加字符串时说 字符串名称 string munish kumar 运算符在字符串类中被重载 但是当我们添加像 1 2 这样的数字时 看起来不像重载的运算符调用 我只是想知道编译
  • 了解 OpenCV LBP 实现

    我需要一些关于基于 LBP 的人脸检测的帮助 这就是我写这篇文章的原因 我有以下与 OpenCV 上实现的人脸检测相关的问题 在 lbpCascade frontal face xml 中 来自 opencv 什么是 内部节点 叶值 树 特
  • 如何使用 FCM 使用 php 脚本向多个设备发送推送通知?

    我是使用 FCM 从 php 向 Android 设备推送通知的新手 从 android 端 我生成了 FCM reg id 并通过 php 脚本发送它并存储到 mysql 数据库中 现在 我想同时从 php 脚本向多个 Android 设
  • 在 C# 中如何检测浮点数是否具有重复的小数扩展?

    我只需要知道如何检测浮点数中的重复小数扩展 Example 0 123456789123456789 该号码的重复部分为 123456789 我想用 C 实现自动化 有什么聪明的解决方案吗 有一个很好的技巧可以计算给定浮点数的有理近似值 基
  • @RepositoryEventHandler 事件以 @RepositoryRestController 停止

    当我创建一个 RepositoryRestController对于一个实体 关联的 RepositoryEventHandler方法不会通过 Spring Boot 1 4 0 M3 也包括 Spring Boot 1 3 5 在 Spri
  • Laravel UTF-8 到数据库

    我正在使用 Eloquent 将一个新人 save 到我的数据库中 人名包含特殊字符 并且它没有提交 这是我的步骤和结果 echo Input get firstname Migu l 这给了我这个 Migu l 当我开始使用 eloque
  • Foldr 与 Foldl(或 Foldl')的含义

    首先 现实世界哈斯克尔我正在读的书说永远不要使用foldl并改为使用foldl 所以我相信它 但我不知道什么时候使用foldr vs foldl 尽管我可以看到它们以不同方式工作的结构摆在我面前 但我太愚蠢了 无法理解什么时候 哪个更好 我
  • 使用 Git 内部的 Winmerge 来归档 diff

    有没有办法在 git 内部使用 Winmerge 来进行 Diffs 6 年后 2015 年 6 月更新 详见 git mergetool winmerge 一个简单的git config diff tool winmerge就足够了 Gi
  • 允许同时创建多少个AVPlayer?

    我有一个collectionView和每个cell has an AVPlayer即将播放 所以每个细胞都在同时播放视频 iOS 好像只允许同时播放 16 个视频 例如 请查看下面我的示例应用程序 满分 50cells 只有 16 人开始播
  • 从动作脚本库中检测 AIR 与 Flash Player

    我有一个 SWC 其操作方式需要略有不同 具体取决于它是否由 AIR 托管 我在网上看到了两个建议 测试 WindowedApplication 的 Application application 测试 Security sandboxTy
  • Ruby on Rails 中自动递增非主键字段

    在RoR迁移中 如何自动递增非主键字段 我想在数据库定义中而不是在模型中执行此操作 您需要执行一条 SQL 语句 statement ALTER TABLE users CHANGE id id SMALLINT 5 UNSIGNED NO
  • 隐藏解释器导入的模块

    我构建了一个模块 它使用几个不同的模块来完成各种任务 当我在 IPython 中导入模块并列出可用于自动完成的函数时 这些外部模块包含在该列表中 是否有可能以某种方式隐藏它们 在Python中 模块可以定义一个 all 变量 它是某人执行以
  • MVC“添加控制器”是“无法检索元数据...配置系统无法初始化”

    我从头开始创建了一个包含两个项目的新解决方案 一个是 MVC 3 另一个是支持 EF 4 2 项目 整个事情构建成功 我从 MVC 项目中打开 添加控制器 对话框 并让它根据我从支持 EF 项目中选择的上下文和模型生成代码 添加控制器 对话
  • 后台计时器更新 UI?

    我的申请遇到了一点问题 我想每 10 秒更新一次 UI 上的内容 我首先使用了一个DispatcherTimer为此 但它会在短时间内阻止我的 UI 因为更新方法需要从网络加载某些内容 并且此操作需要一些时间 现在我想到了某种后台工作者 然
  • Windows批处理脚本解析CSV文件并输出文本文件

    我在另一个页面上看到了回复 帮助编写批处理脚本来解析 CSV 文件并输出文本文件 出色的代码顺便说一句 ECHO OFF IF 1 GOTO EOF SET filename 1 SET fcount 0 SET linenum 0 FOR
  • 在某个短语之后分割字符串?

    我有一批绳子需要剪掉 它们基本上是一个描述符 后面跟着代码 我只想保留描述符 a descriptor dps 23 fd another 23 fd and another fd and one without a code 上面的代码是
  • 在没有无限摘要的情况下从 Angular 成功调用history.pushState()?

    有办法打电话吗history pushState 没有角度进入无限消化循环 我正在尝试将我的应用程序从后端路由迁移到前端路由 并且所有 stackoverflow 帖子 google 资源似乎都没有答案 这就是我们基于 github 评论在
  • 如何添加 IDesignTimeDbContextFactory 的实现以添加迁移到 .Net core 2.0 应用程序?

    我正在尝试从 NET Core 2 0 MVC 应用程序的包管理器控制台运行 Add Migration InitialCreate 命令 查看所有可能的来源后仍然无法解决问题 错误描述为 PM gt Add Migration Initi
  • 如何在 Neo4j 2.2.0-RC01 上禁用基本身份验证

    目前我使用 Neo4j 2 2 0 RC01 它默认启用基本身份验证 如何禁用 Neo4j 2 2 0 RC01 上的默认基本身份验证 In file conf neo4j server properties 将 dbms security
  • 为什么在 C++ 中使用 try 和 catch()?

    我明白那个try and catch 用于异常处理 以防在某些情况下程序发生错误或崩溃 我也了解它们是如何工作的 但为什么要使用try and catch 为什么不直接使用if 查找特定案例的语句 如果该案例为真 则确实如此cout lt