返回对象的返回类型或NULL

时间:2013-06-03 18:21:46

标签: c++

我目前有一个方法可以返回一个对象(比如学校)。但是有时在该方法中它可以返回NULL,这是一个int。这种方法的返回类型应该是什么。我可以安全地返回这两种方法中的任何一种。有什么建议 ?我对其他方法持开放态度。

4 个答案:

答案 0 :(得分:9)

如果您要返回的类型没有自然的“null”值,boost::optional似乎就是您要找的。

但是,请考虑是否无法生成返回值是否为错误条件。如果是,而不是返回boost::optional(或空值),请考虑让函数始终返回预期类型(无论它是什么),并在无法生成返回值时抛出异常。

答案 1 :(得分:7)

如果您有C ++ 11编译器,则应该返回std::unique_ptr<school>。如果你已经有了C ++ 14的东西,那么std::optional<school>可能会有效。如果您已安装了boost并且没有std::optional,则可以考虑boost::optional<school>。你不应该返回一个原始指针,因为它不清楚,谁负责从功能界面删除指针。

正如Andy所指出的,如果无法成功构造返回值,则可能会抛出异常。这是有道理的,如果案例不经常发生并且调用者通常不希望该函数失败。

答案 2 :(得分:4)

如果要返回NULL,可以考虑返回学校类型的指针,而不是直接类型。这样,您可以返回NULL,并且能够从调用者确定返回值是否为NULL

答案 3 :(得分:1)

考虑一个类学校的静态成员,这是一个无效的学校 - 像......一样......

class School {
public:
    static const School invalid; 
...
};

您可以返回对无效学校的引用,而不是与null比较,而不是返回null,与School :: invalid进行比较。

可选地,这个无效的学校可以是School的子类,其方法可以做一些可预测的事情 - 比如throw和error - 而不会冒引用空指针的风险。

与任何其他未命名常量一样,null对其值的来源或意图不明确,例如,0x00FFFFFF的信息量比Color :: White少。