2013-06-03 54 views
2

我目前有一个返回对象(比如学校)的方法。然而有时在该方法中,它可能会返回NULL,这是一个int。这种方法的返回类型应该是什么,以便我可以安全地返回任何一个。有什么建议么 ?我接受其他方法。返回对象的返回类型或NULL

+1

'NULL'是一个int? – 2013-06-03 18:22:43

+1

顺便说一句,返回一个引用并抛出。或者返回一个指针,然后你可以返回NULL。 – 2013-06-03 18:23:08

+3

@ H2CO3 NULL为0,因此如果它在指针上下文之外使用,则将被视为“int”(例如,用于出现错误消息)。 – zwol

回答

7

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

安迪指出,这可能是一个选项,以抛出一个异常,如果返回值不能被成功构建。这很有意义,如果情况不经常发生,调用者通常不会期望函数失败。

9

如果你想返回没有一个天然的“空”值的类型,boost::optional似乎是你在找什么。

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

4

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

1

考虑学校类的静态成员是无效的学校 - 喜欢的东西...

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

,而不是返回空的,你可以返回一个参考无效的学校,而不是比较空,比较School :: invalid。

可选的,该无效的学校可能是学校与该做些什么可预测的方法,一个子类 - 像罚球和错误 - 而不用担心引用一个空指针。

空,像任何其他无名常数,是不明确的关于它的值的来源或意图例如,至0x00FFFFFF比颜色::白较少信息。