C++ 返回对象的返回类型或NULL

C++ 返回对象的返回类型或NULL,c++,C++,我目前有一个方法返回一个对象(比如school)。然而,有时在该方法中,它可能返回NULL,这是一个int。这种方法的返回类型应该是什么。这样我就可以安全地返回这两个方法中的任何一个。有什么建议吗?我对其他方法持开放态度。如果要返回的类型没有一个自然的“null”值,那么它似乎就是您要寻找的类型 但是,考虑是否不能产生返回值是一个错误条件。如果是,而不是返回 Boo::可选< /COD>(或空值),考虑您的函数总是返回预期的类型(无论它是什么),当不能产生返回值时抛出异常。 < P>如果您想返回

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

如果要返回的类型没有一个自然的“null”值,那么它似乎就是您要寻找的类型


但是,考虑是否不能产生返回值是一个错误条件。如果是,而不是返回<代码> Boo::可选< /COD>(或空值),考虑您的函数总是返回预期的类型(无论它是什么),当不能产生返回值时抛出异常。

< P>如果您想返回<代码> null < /C> >,您可以考虑返回学校类型的指针,而不是直接类型。通过这种方式,您可以返回NULL,并能够从调用方确定返回值是否为
NULL

,如果您有C++11编译器,您可能应该返回
std::unique_ptr
。如果你已经有了C++14的东西,那么也许
std::optional
可以工作。如果您已经安装了Boost,并且没有<代码> STD::可选,您可以考虑<代码> Boo::可选的< /代码>。您不应该返回原始指针,因为不清楚谁负责从函数接口中删除指针


正如Andy所指出的,如果无法成功构造返回值,则可以选择抛出异常。如果这种情况不经常发生,调用方通常不会期望函数失败,那么这是有意义的

考虑一个班级学校的静态成员,它是一个无效的学校-类似于

class School {
public:
    static const School invalid; 
...
};
您可以返回对无效学校的引用,而不是返回null,还可以返回对school::invalid的比较,而不是将其与null进行比较

或者,这个无效的school可以是school的一个子类,其方法可以执行一些可预测的操作(如抛出和错误),而不会冒引用空指针的风险


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

顺便说一句,返回一个引用并抛出。或者返回一个指针,然后您可以返回
NULL
@H2CO3 NULL为0,因此如果它在指针上下文之外使用,将被视为
int
(例如,用于错误消息)。@Zack或它被定义为
\uu NULL
(例如,在LLVM工具链附带的libc中)或任何定义的实现。它不一定是
0
@H2CO3,什么类型的
auton=\uu null推断?对于GCC,它是
长的
。该标准要求
NULL
是一个实现定义的NULL指针常量,其中“NULL指针常量是一个值为零的整数文本(2.14.2)或
std::nullptr\u t
类型的prvalue”@H2CO3 C++98 4.10p1读取“空指针常量是一个整数类型的整型常量表达式rvalue,其计算结果为零。”(我的重点)因此,无论实现定义的东西
null
扩展到什么,如果在转换为空指针的上下文之外使用,它的行为必须类似于某种整数。(在C++11中,
std::nullptr_t
类型的prvalue是另一种选择,但我根据上下文怀疑OP没有使用C++11编译器。)