现代 C++:返回状态(正常/不正常)和错误(如果状态不正常)的函数的最佳方法是什么?

san*_*ood 5 c++ c++11

我们可以返回一个元组

std::pair<bool, std::string> fooFunction();
Run Code Online (Sandbox Code Playgroud)

但这使得创建返回值时代码变得多余,并强制调用者处理元组(在 c++17 中使用结构绑定很容易)

if ( okayCondition)
    return {true, {}}; 
else 
   return { false, "blabla error"};
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用

std::optional<std::string> fooFunction();
Run Code Online (Sandbox Code Playgroud)

这对于返回 bool 的现有函数很有趣,因为由于 std::optional 运算符 bool,大多数调用者不需要更新

//Legacy code ok
if (fooFunction())
Run Code Online (Sandbox Code Playgroud)

我知道一种更重的方法,一个模板化的 ReturnStatus 类,它会在调用者不测试返回状态值的情况下抛出。
还有其他方法吗?

Mar*_*som -3

C++ 的处理方式是根本不返回状态。如果出现错误,则抛出异常。错误代码都是 1980 年代的。

  • 例外仅针对异常错误,不适用于常见错误。 (2认同)
  • 相关圣战的链接 /sf/ask/6977841/ 和 /sf/ask/129464331/ c-arguments-for-exceptions-over-return-codes 因为这往往是一个有争议的争论 (2认同)