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