为什么在C++;? 我看到很多人不喜欢在C++程序中使用异常的趋势。p> 有些人甚至说,异常对C++是不自然的。

为什么在C++;? 我看到很多人不喜欢在C++程序中使用异常的趋势。p> 有些人甚至说,异常对C++是不自然的。,c++,exception-handling,C++,Exception Handling,游戏程序员通常禁用异常处理 此外,在性能关键型应用程序中通常避免异常处理 我知道C++没有总是有异常处理。< /P> P>我不明白为什么人们在C++中不使用异常,但是对于性能关键代码,我可以看到为什么。通常,与返回错误代码并为此委派一些错误处理相比,引发异常的成本相对较高。我猜这是从异常之前实现的C++代码。另一个原因可能是,编写异常类是没有意义的,当以另一种方式处理错误更容易时。第二条声明我不能真正评论,因为它似乎是自以为是地为(可能是因为C++没有总是有例外)提供了一个很好的答案。 < P

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

此外,在性能关键型应用程序中通常避免异常处理

<>我知道C++没有总是有异常处理。< /P>
<> P>我不明白为什么人们在C++中不使用异常,但是对于性能关键代码,我可以看到为什么。通常,与返回错误代码并为此委派一些错误处理相比,引发异常的成本相对较高。我猜这是从异常之前实现的C++代码。另一个原因可能是,编写异常类是没有意义的,当以另一种方式处理错误更容易时。第二条声明我不能真正评论,因为它似乎是自以为是地为(可能是因为C++没有总是有例外)提供了一个很好的答案。

< P>我不明白为什么人们在C++中不使用异常,但是对于性能关键代码,我可以看到为什么。通常,与返回错误代码并为此委派一些错误处理相比,引发异常的成本相对较高。我猜这是从异常之前实现的C++代码。另一个原因可能是,编写异常类是没有意义的,当以另一种方式处理错误更容易时。这第二条语句我不能真正评论,因为它似乎是自以为是地为(可能是C++不总是有例外的事实)提供一个好的答案。

< P>有很多理由避免例外:

  • 异常安全有点困难,需要非常小心地遵循约定
  • 在游戏中,没有那么多东西会在运行时失败。所有可能失败的事情都在游戏的初始化阶段;加载文件等,这不是游戏的核心性能部分。如果它在游戏的性能关键部分,你应该问为什么它会首先失败
  • 堆栈展开会导致软件调试出现问题。当有东西抛出时,很难在代码中找到它发生的地方

  • 有充分的理由避免例外情况:

  • 异常安全有点困难,需要非常小心地遵循约定
  • 在游戏中,没有那么多东西会在运行时失败。所有可能失败的事情都在游戏的初始化阶段;加载文件等,这不是游戏的核心性能部分。如果它在游戏的性能关键部分,你应该问为什么它会首先失败
  • 堆栈展开会导致软件调试出现问题。当有东西抛出时,很难在代码中找到它发生的地方

  • 除了例外,我有四个问题:

  • 人们倾向于将它们作为非异常程序流的一部分使用
  • 为了正确地使用它们,您还需要精通其他C++技术(RAII,智能指针)。
  • 它提供了一个“简单的出路”-“塞住它-我就扔了”
  • 如果没有仔细的计划,通常会在程序的外部级别出现大量的“catch”语句(或者更糟的是,“catch all”)

  • 因此,我倾向于不在一个拥有各种技能的程序员的团队中使用它们。但是,如果使用得当,它们非常棒。

    我有四个问题,但有例外:

  • 人们倾向于将它们作为非异常程序流的一部分使用
  • 为了正确地使用它们,您还需要精通其他C++技术(RAII,智能指针)。
  • 它提供了一个“简单的出路”-“塞住它-我就扔了”
  • 如果没有仔细的计划,通常会在程序的外部级别出现大量的“catch”语句(或者更糟的是,“catch all”)

  • 因此,我倾向于不在一个拥有各种技能的程序员的团队中使用它们。不过,如果使用得当,它们会很棒。

    这不是离题吗?它假定事实不明显(异常处理“在C++中通常被轻视”)。这是一个问答网站,而不是一个讨论论坛。唯一错误的是问题的语气有点假设(你可以编辑)。例外情况通常不会被轻视,但通常会被轻视。(又名答案)的原因很有启发性和教育性。@xeon111:我编辑这个问题是为了“调整语气”。如果您不同意,请回复。@sje397我确实同意更改。我不知道如何完成正文,所以我写了一些东西,让这个问题听起来有点开放(个人观点)。我仍然希望看到这个问题重新开始。它怎么不离题呢?它假定事实不明显(异常处理“在C++中通常被轻视”)。这是一个问答网站,而不是一个讨论论坛。唯一错误的是问题的语气有点假设(你可以编辑)。例外情况通常不会被轻视,但通常会被轻视。(又名答案)的原因很有启发性和教育性。@xeon111:我编辑这个问题是为了“调整语气”。如果您不同意,请回复。@sje397我确实同意更改。我不知道如何完成正文,所以我写了一些东西,让这个问题听起来有点开放(个人观点)。我仍然希望这个问题能够重新讨论。