为什么在C ++中经常不使用例外?

时间:2013-06-04 03:10:25

标签: c++ exception

在此问题听起来非常愚蠢之前,让我解释一下。我使用了很多C#,Java和C ++。我注意到的主要问题是错误处理,特别是在第三方库中。在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 ++中加入异常?我不明白为什么不使用它们,这不就是它们的用途吗?

2 个答案:

答案 0 :(得分:8)

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

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

  • 在C ++的早期阶段,一些平台不支持异常。
  • 有一种全面的想法,即异常处理是性能开销。实际上,分析从未表现出任何这样的瓶颈。
  • 大多数编写C ++代码的程序员都是C程序员迁移到C ++而不是将异常理解为概念。

答案 1 :(得分:4)

我是一名C ++程序员,我几乎从不使用异常,因为这种非本地控制流程使我更难以推断出我的程序在做什么。我非常擅长推理我所看到的控制流构造,并且在推理控制流构造时非常糟糕,我没有看到。其他人则有不同的感受并做出相应的计划。