异常处理和从非致命错误中恢复 我正在编写一个C++应用程序,它需要处理来自C API的错误代码,特别是WiSoCK2 API。我不确定处理致命错误和非致命错误的最佳方法
例如,如果调用send失败,错误代码为WSAECONNABORTED,我希望将错误返回给调用方,但继续执行程序。在这种情况下,调用方会将连接标记为已终止并继续。但是如果它失败了,我想考虑致命的错误,比如WSAENETDOWN,我希望应用程序终止。< /P> 我知道异常用于异常情况,所以使用异常来处理致命错误是有意义的。我想问的是如何处理非致命错误案例 在非致命案例中,是否应返回错误代码?如果我还需要返回一个值,那么我需要同时返回一个代码和一个值。或者我应该做两个异常分类,比如FatalError和非CatalError类,并且只在处理非CatalError异常时尝试恢复?或者有其他/更好的方法来做到这一点 [更新]澄清 对于我对最初的问题的理解似乎有些混乱。我了解异常是如何处理的,不处理时会发生什么,重新引用异常,以及它们的性能特征 我要求提供技术/最佳实践来处理并非真正例外的情况。在这种情况下,可能发生的错误会导致连接无法使用,但不会影响服务器的其余部分异常处理和从非致命错误中恢复 我正在编写一个C++应用程序,它需要处理来自C API的错误代码,特别是WiSoCK2 API。我不确定处理致命错误和非致命错误的最佳方法,c++,exception-handling,C++,Exception Handling,例如,如果调用send失败,错误代码为WSAECONNABORTED,我希望将错误返回给调用方,但继续执行程序。在这种情况下,调用方会将连接标记为已终止并继续。但是如果它失败了,我想考虑致命的错误,比如WSAENETDOWN,我希望应用程序终止。< /P> 我知道异常用于异常情况,所以使用异常来处理致命错误是有意义的。我想问的是如何处理非致命错误案例 在非致命案例中,是否应返回错误代码?如果我还需要返回一个值,那么我需要同时返回一个代码和一个值。或者我应该做两个异常分类,比如FatalError
我最好避免每个错误代码都有一个异常类,因为这样会创建很多几乎无用的异常类。如果您想将错误传播到调用堆栈中,可以使用异常。创建从std::exception继承的自定义类,如果要应用特定的处理方法,则捕获它们
try {
my_function_which_throws();
} catch (const FatalError& e) {
// do something, or rethrow
} catch (const NonFatalError& e) {
// log or do nothing
}
异常只有在抛出时才需要时间处理。如果函数不抛出任何内容,则不会影响性能。使用抛出;如果你不想处理它,在你的catch子句中。没有任何后盾,通过终止终止程序。Bam,dead,没有提示用户。异常与返回代码与它是否致命是非常正交的。