为什么C++中不经常使用异常?

Why aren't exceptions used often in C++?

本文关键字:异常 不经常 C++ 为什么      更新时间:2023-10-16

在这个问题听起来很愚蠢之前,让我解释一下。我用了很多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++中的异常?我不明白为什么不使用它们,这不是它们存在的意义吗?

您所展示的示例(条件if)不符合有效情况的条件。
异常用于处理异常情况。在您的例子中,函数只是返回一个值,两个结果都是预期,没有什么异常。该函数可能是一个C(C没有异常来抛出任何) api,而您没有源代码。在这种情况下,您根本无法摆脱条件if。检查后如何处理错误/异常完全取决于您。最有可能的是抛出一个异常并在层次结构中传播它,但那是在你以它要求的方式处理api之后。

至于为什么人们不使用异常,可能有很多原因(或神话),我想到的三个最常见的原因是:
    在c++的早期,一些平台不支持异常。有一种普遍的观点认为异常处理是一种性能开销。在现实中,分析通常不会显示任何这样的瓶颈。
  • 大多数编写c++代码的程序员都是迁移到c++的C程序员,并且没有清楚地将异常作为一个概念来理解。

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