在 C++ 和 C# 中使用 try/catch 的正确方法是什么?

What's the right way to use try/catch in C++ and C#?

本文关键字:catch 方法 是什么 try C++      更新时间:2023-10-16

可能的重复:
我何时以及如何使用异常处理?

我已经看到程序员具有" try {} catch(){}"块,用 c#和c#和C 。在C#中,这似乎是通常的。但是在C 中,这似乎晦涩难懂。使用它们的正确方法是什么?

实际上只有三次应该使用try/catch:

  1. 在您的应用程序的最高级别上,因此您可以向用户提供友好的错误消息(希望记录一些有用的信息,以便稍后可以解决问题)。

  2. 当您可以从异常中正确恢复(或至少清理不再需要的资源)。

  3. 当您要使用异常信息做某事时,然后将异常起泡。

除了这三种情况外,没有理由使用尝试/捕获块。您应该让异常泡泡到呼叫者,以便在需要时可以处理。

意图 应该将操作推迟到可以做有用的某些程度,无论是通知用户,重新尝试还是其他任何事情。因此,在中捕获例外,每个功能通常都是差的。

正如贾斯汀(Justin)所说,您可能需要捕获并重新刷新一个例外来进行本地清理 - 这将解释C#代码。

在C 中,惯用方法是RAII,而是使用确定性的破坏来执行本地清理,并避免了捕获的处理程序,这些处理程序不会真正实现,但div。