抛出或返回错误

时间:2014-12-15 10:28:43

标签: c++ error-handling throw

我们说我有以下功能:

unsigned char *f(unsigned char*, int, int, long, const char*);

我可以将返回值更改为HRESULT(或我自己定义的),但我必须更改函数内的整个代码。或者我可以使用throw来指出错误。

我的问题是:

  • 返回HRESULT
  • 有哪些优点/缺点
  • throw有哪些优点/缺点?
  • 哪一个更安全?

我应该使用第二个还是完全取决于我喜欢的?

编辑: 我并不严格意味着使用HRESULT。您可以将自己的枚举定义为独立于Windows的错误处理

2 个答案:

答案 0 :(得分:2)

我会说在处理C ++中的错误时应该总是求助于异常。让我们看看为什么在你的情况下它是更好的选择。

首先HRESULT是Windows操作系统中使用的数据类型,它会立即使您的代码在Linux平台上无法移植。

其次,首先涵盖所有其他方面。

为什么例外优于错误代码?

1)异常将错误的流量与正常流量分开,这很难通过错误代码获得。

2)有时候没有合理的错误代码可以发送给调用者。

3)如果您使用错误代码,则检查可用性部门是否发生正常/错误退出更有责任。但是,未被捕获的异常会使您的程序停止运行。

使用异常而不是错误代码只是一些好处。

答案 1 :(得分:1)

我会说它完全取决于你喜欢什么。没有优势或劣势(使用您的编辑)。例如,我更喜欢使用throw因为最终用户被迫进行某种错误检查,所以我几乎在所有情况下都使用throw。