为什么在C ++中经常会忽略异常处理?

时间:2011-08-10 01:16:54

标签: c++ exception-handling

我已经看到许多人不喜欢在他们的c ++程序中使用异常的趋势。

有些人甚至认为异常对c ++来说并不自然。

游戏程序员通常会禁用异常处理。

在性能关键型应用程序中,通常也会避免异常处理。

我知道c ++并不总是有异常处理。

有充分的理由避免它吗?

3 个答案:

答案 0 :(得分:4)

有充分的理由避免例外:

  1. 异常安全有点困难,需要非常谨慎地遵循以下惯例
  2. 在游戏中,没有那么多可能在运行时失败的东西。一切可能失败的东西几乎都是游戏的初始化;加载文件等,这不是游戏的核心性能部分。如果它处于游戏的性能关键部分,那么首先应该问为什么它会失败?
  3. 堆栈展开会导致调试软件出现问题。当某些东西抛出时,很难找到它确实发生在代码中的哪个位置。

答案 1 :(得分:4)

我有四个例外问题:

  1. 人们很想将它们用作非特殊程序流程的一部分
  2. 为了正确使用它们,您还需要精通其他C ++技术(RAII,智能指针)
  3. 它提供了一个'简单的出路' - “填充它 - 我只是扔掉”
  4. 如果没有仔细的计划,你通常会在程序的外层发现大量的“捕获”声明(或者更糟糕的是,“全能”)
  5. 所以我倾向于不在具有各种技能的程序员的团队中使用它们。如果使用得当它们很棒。

答案 2 :(得分:1)

我不明白为什么人们不会在C ++中使用异常,但对于性能关键代码,我可以理解为什么。通常,引发异常相对昂贵,而不是返回错误代码并为此委派一些错误处理的C风格处理。我的猜测是,在实现异常之前,这是遗留的C ++代码。另一个原因可能是编写异常类是没有意义的,例如,当以另一种方式处理错误时更容易。我无法评论的第二个陈述似乎是为了提供一个好的答案(可能源于C ++并不总是有例外)。