0

在这个问题听起来很愚蠢之前,让我解释一下。我使用了很多 C#、Java 和 C++。我注意到的主要事情是错误处理,特别是在 3rd 方库中。在 C# 和 Java 中,处理错误的一般方法是通过异常,而不是传统的 C 处理错误的方法 int。

这是我在 C#/Java 中常见的:

try
{
    ExternalLibraryInit();
}
catch (ExternalLibraryException ex)
{
    //error
}

这是我在 C++ 中经常发现的:

if (ExternalLibraryInit()) //Generally returns an int, which no error is 0 and a error is
//anything else
{
    //error
}

为什么人们倾向于忽略 C++ 中的异常?我不明白为什么不使用它们,这不是它们的用途吗?

4

2 回答 2

8

您显示的示例(条件 if)不符合例外情况的有效条件。
异常用于处理异常情况。在您的情况下,该函数仅返回一个值,并且预期这两个结果都没有什么特别之处。该函数可能是您没有源代码的 C( C 没有抛出任何异常的异常)api。在这种情况下,您根本无法摆脱条件 if 。检查后如何处理错误/异常完全取决于您。很可能有人会抛出异常并将其传播到层次结构中,但那是在您以需要处理的方式处理 api 之后。

至于人们为什么不使用异常,可能有很多原因(或神话),我想到的三个最常见的原因是:

  • 在 C++ 的早期,一些平台不支持异常。
  • 有一个普遍的想法是异常处理是一种性能开销。实际上,分析往往从未显示出任何此类瓶颈。
  • 大多数编写 C++ 代码的程序员都是迁移到 C++ 的 C 程序员,并没有清楚地将异常理解为一个概念。
于 2013-06-04T03:14:37.427 回答
4

我是一名 C++ 程序员,我几乎从不使用异常,因为这种非本地控制流使我更难以推理我的程序在做什么。我非常擅长推理我看到的控制流结构,而非常不擅长推理我看不到的控制流结构。其他人有不同的感觉并相应地编程。

于 2013-06-04T03:19:59.447 回答