2

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

4

4 回答 4

9

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

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

于 2013-06-03T18:23:38.003 回答
7

std::unique_ptr<school>如果您有 C++11 编译器,您可能应该返回一个. 如果你已经有 C++14 的东西,那么也许std::optional<school>会起作用。如果你安装了 boost 而没有安装std::optional,你可以考虑boost::optional<school>. 您不应该返回原始指针,因为目前尚不清楚谁负责从函数接口中删除指针。

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

于 2013-06-03T18:35:30.183 回答
4

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

于 2013-06-03T18:24:49.630 回答
1

考虑一个无效学校的类 School 的静态成员 - 类似于......

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

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

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

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

于 2013-06-03T18:51:47.827 回答