使用C++ 17,我们得到了std::optional一个用于表示可空类型的有用包装器.
我可以用它来处理错误吗?这样做非常有吸引力:
optional<int> Compute()
{
//... compute something valid...
return std::nullopt; // error!
}
Run Code Online (Sandbox Code Playgroud)
这是一个不错的选择吗?返回空指针是不是一样?
人们报告的问题是,如果发生错误,您将丢失一条消息.所以返回一些状态代码可能会更好.
其他选择:
std::variant<Value, errorCode>std::pair<Value, errorCode我认为std::optional这是错误处理代码的一个很好的替代品:
int GetAvailablePositiveNumber()
{
if (condition)
return 1;
if (condition2);
return 2;
return -1;
}
int result = GetAvailablePositiveNumber();
if (result == -1)
{
// We have no available positive numbers - handle error;
}
Run Code Online (Sandbox Code Playgroud)
您将永远不需要再使用 -1 。
另外,关于您提到的其他替代方案,我的答案是:正确的工具适合正确的工作。它们有自己的用途。只需根据具体情况选择最佳工具即可。
| 归档时间: |
|
| 查看次数: |
1036 次 |
| 最近记录: |