c++ - 为什么使用异常而不是返回错误代码

标签 c++ exception

<分区>

Possible Duplicate:
Exceptions or error codes

你好,

我正在寻找一些关于何时使用返回值与异常的指南。

非常感谢。

最佳答案

错误通常在您的代码中的非常低的级别检测到,但在非常高的级别进行处理。如果您为这些使用返回代码,则必须设计所有中间级别以期望低级别代码并将其向上传播直到有人处理它。除了异常(exception)情况,您只需要在低级别抛出,并在高级别捕获(如果有的话)。只要您的中级代码使用 RAII,您就不必更改任何代码来进行错误传播。

所以我经常思考错误的类型以及可能在何处进行处理。如果调用者可能会处理这个问题,因为这是一件很常见的事情,那么返回代码就很好。如果错误是灾难性的(无法分配必要的资源),则不能期望直接调用者处理它。

其他需要考虑的事情:异常不能被忽略,返回码可以。如果不处理问题会很危险,请使用异常。

从技术上讲,异常不能通过 C 代码向上传播。 (它适用于许多系统,但它既不可移植也不可保证。)所以如果你有一个 C 库回调你的 C++ 代码,你可能不应该从回调中抛出异常。对于线程边界等也是如此。

关于c++ - 为什么使用异常而不是返回错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3850316/

相关文章:

c++ - 访问 ".txt"文件中的信息并转到确定的行

c++ - friend 没有得到私有(private)成员(member)

c++ - 函数按值返回时,复制构造函数是否执行?

asp.net - 恢复SQL Server 2008数据库后"Invalid object name"

c# - ExecuteScalar "Specified cast is not valid"异常

c++ - 从 unordered_map move 键

c++ - G++ 不使用 -O0 编译我的源代码,但它使用 -O2 -DNDEBUG,我该如何解决?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

java - 跟踪未检查(或检查?)异常丢失的位置

java - INTELLIJ 中的 ArrayIndexOutOfBoundsException