C++.如何返回空指针而不是函数返回类型?

Her*_*ott 1 c++ c++11

我有一个功能,检查正则表达式并std::vector<int>根据正则表达式结果返回.我需要检查功能是否失败/成功.在成功返回向量对象时,无法nullptr稍后检查if (somefunc() == nullptr) // do smth

k.v*_*.v. 11

返回类型的std::vector<int>值不能nullptr.

在这种情况下最直接的方式是返回std::unique_ptr<std::vector<int>>- 在这种情况下,它可以返回nullptr.

其他选择:

  • 如果失败则抛出异常
  • 使用optional<std::vector<int>>作为返回类型(boost::optional或者std::optional,如果你的编译器有这个C++ 17功能)
  • 返回bool参数并具有std::vector<int>&函数的输出参数

最好的方法取决于用例.例如,如果大小为0的结果向量等同于"失败" - 请随意在代码中使用此类知识,并检查返回向量是否为空以了解函数是否失败或成功.

在我的练习中,我几乎总是坚持回归optional(提升或标准,取决于环境限制).这种界面是说明"结果可以存在与否"这一事实的最明确的方式.

总结一下 - 这对于唯一正确的解决方案来说不是问题.上面列出了可能的选项 - 这只是您的个人经验和环境限制/对话的问题 - 可以选择哪个选项.

  • @ssteinberg:例外也不适用于失败案例.它们适用于特殊情况.失败的正则表达式匹配远非特殊. (2认同)
  • @kv - 一个糟糕的问题很好的答案.正如你所指出的那样,真正的问题是,首先返回"null或vector"可能是一个坏主意 - 如果可能的话,OP应该真正考虑不同的设计. (2认同)