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

时间:2017-06-10 17:12:47

标签: c++ c++11

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

3 个答案:

答案 0 :(得分:11)

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

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

其他选择:

  • 在失败的情况下抛出异常
  • 使用optional<std::vector<int>>作为返回类型(如果您的编译器具有此C ++ 17功能,则为boost::optionalstd::optional
  • 返回bool参数并将std::vector<int>&作为函数的输出参数

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

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

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

答案 1 :(得分:1)

您可以返回std::unique_ptr<std::vector<int>>并检查该值,或抛出异常,或选中vector.size() == 0等。

答案 2 :(得分:0)

有许多不同的选择:

  • 返回std::vector<int>*指针,可选地包含在std::unique_ptr中以进行生命周期管理。失败时返回nullptr

  • 通过引用参数传递std::vector,然后返回bool表示成功/失败。

  • 在失败时抛出异常。

  • 返回std::pair<std::vector<int>, bool>,其中second字段对表示成功/失败。