我目前有一个返回对象的方法(比如学校)。但是有时在该方法中它可能会返回 NULL,它是一个 int。这种方法的返回类型应该是什么。我可以安全地返回两者中的任何一个。有什么建议么 ?我对其他方法持开放态度。
4 回答
如果您要返回的类型没有自然的“null”值,boost::optional
那么这似乎就是您正在寻找的。
但是,请考虑无法产生要返回的值是否是错误条件。如果是,而不是返回 a boost::optional
(或 null 值),考虑让您的函数始终返回预期的类型(无论它是什么),并在无法产生返回值时抛出异常。
std::unique_ptr<school>
如果您有 C++11 编译器,您可能应该返回一个. 如果你已经有 C++14 的东西,那么也许std::optional<school>
会起作用。如果你安装了 boost 而没有安装std::optional
,你可以考虑boost::optional<school>
. 您不应该返回原始指针,因为目前尚不清楚谁负责从函数接口中删除指针。
正如 Andy 所指出的,如果无法成功构造返回值,则可以选择抛出异常。这是有道理的,如果这种情况不经常发生并且调用者通常不会期望函数失败。
如果要返回NULL
,可以考虑返回学校类型的指针,而不是直接类型。这样,您可以返回 NULL 并能够从调用方确定返回是否为NULL
.
考虑一个无效学校的类 School 的静态成员 - 类似于......
class School {
public:
static const School invalid;
...
};
您可以返回对无效学校的引用,而不是返回 null,而不是与 null 进行比较,而是与 School::invalid 进行比较。
可选地,这个无效的学校可以是 School 的子类,它的方法可以做一些可预测的事情——比如 throw 和 error——而不会有引用空指针的风险。
与任何其他未命名的常量一样,null 对其值的来源或意图是模棱两可的,例如,0x00FFFFFF 比 Color::White 的信息量少。