gpt4 book ai didi

c++ - C++ 中 try/catch block 的使用

转载 作者:IT老高 更新时间:2023-10-28 22:24:51 26 4
gpt4 key购买 nike

一般来说,我倾向于将 try/catch 用于具有多个故障点的代码,这些故障点有一个共同的处理程序。

根据我的经验,这通常是在执行某些操作之前限定输入或上下文的代码,或者在执行某些操作之后限定输出。

我已从文献和同事那里得到建议,以尽量减少此类代码块中的代码,我接受这通常是好的建议。

我想进一步了解上述建议的基础:

  • 开销的性质是什么?
  • 最近是否有针对 try/catch block 的推荐使用(或避免使用)的开发指南?
  • 更快的处理器和更现代的编译器在多大程度上缓解了 try/catch 的问题?

提前感谢您的帮助,

AJ

最佳答案

在 c++ 中,成本取决于实现。一般来说,实现异常有两种方式:

第一个是“表格”方法。编译器构建一组表来查找,在抛出异常的点,去哪里。当抛出异常时,它必须在调用堆栈中向上搜索每个表,直到找到可以捕获此异常的内容。由于这都是基于运行时的,因此进入或退出 try catch 不会产生任何惩罚(好),但抛出异常可能涉及许多查找,从而产生更慢的抛出。我个人更喜欢不为 try catch block 付费,因为异常应该是非常罕见的情况。如果它们必须存储表,这也会使可执行文件更大。

秒是“代码”方法。每次代码进入 try catch block 时,从概念上讲, block 的位置被压入堆栈。这会在进入和退出 try-catch block 期间产生成本,但是,当抛出异常时,运行时机制可以快速弹出堆栈以查找去向。所以,抛出异常(很多?)更快,但现在进入一个 block 是有代价的。将 try catch block 放在紧密的低级循环中可能会产生大量开销。

您必须检查您的特定编译器以查看他们使用的是哪一个。

关于c++ - C++ 中 try/catch block 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/951380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com