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

Arc*_*jia 0 c++ exception

在此问题听起来非常愚蠢之前,让我解释一下.我使用了很多C#,Java和C++.我注意到的主要问题是错误处理,特别是在第三方库中.在C#和Java中,处理错误的一般方法是通过异常,而不是传统的C处理错误,即int.

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

try
{
    ExternalLibraryInit();
}
catch (ExternalLibraryException ex)
{
    //error
}
Run Code Online (Sandbox Code Playgroud)

这是我在C++中常见的东西:

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

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

Alo*_*ave 8

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

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

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

  • 是的,听起来就像是一个C api.其中0表示成功,其他任何表示错误代码.这正是异常意味着要取代的那种东西. (2认同)