在C ++中使用错误代码的更好方法是什么?

时间:2015-08-18 02:17:46

标签: c++ c++11 return-value return-type rvo

我是使用c ++ 11的项目成员。我不确定何时应该使用错误代码来返回值。我发现即使直接返回 string struct 数据,c ++中的RVO也能很好地工作。但是如果我使用返回码,我就无法获得RVO的好处,而且代码有点多余。

所以每次我声明函数时,我都无法决定将哪个用作返回值。我应该如何保持代码的一致性?任何建议都会对我有帮助。

// return string
MyError getString(string& out);
string getString();

// return struct
MyError getStructData(MyStruct& out);
MyStruct getStructData();

1 个答案:

答案 0 :(得分:3)

通常,使用异常而不是错误代码是C ++中的首选替代方法。这有几个原因:

  • 正如您已经观察到的那样,使用错误代码作为返回值会阻止您使用更多值的返回值" natural"
  • 全局错误代码,不是线程安全的,还有其他一些问题
  • 错误代码可以忽略,异常不能
  • 每次可能失败的函数调用后都必须评估错误代码,因此必须使用错误处理逻辑来丢弃代码
  • 可以抛出异常并在调用堆栈中向上传递几层而无需额外处理

当然,存在无法获得例外的环境,通常是由于平台限制,例如:在嵌入式编程中。在这些情况下,错误代码是唯一的选择。

但是,如果您使用错误代码,请与传递错误代码的方式保持一致。我所看到的最有吸引力的错误代码使用不占用返回值点并且仍然是线程安全的,它是对每个函数中的上下文对象的引用。上下文对象将具有全局或每线程信息,包括最后一个函数的错误代码。