我目前有一个返回对象(比如学校)的方法。然而有时在该方法中,它可能会返回NULL,这是一个int。这种方法的返回类型应该是什么,以便我可以安全地返回任何一个。有什么建议么 ?我接受其他方法。返回对象的返回类型或NULL
2
A
回答
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比颜色::白较少信息。
相关问题
- 1. Symfony2 Relationship返回null,应返回对象
- 2. 返回对象类型C
- 3. 返回类型对象
- 4. 对象返回类型
- 5. 返回对象或null时返回语句丢失
- 6. Graphql如何返回对象或null
- 7. @Mock对象返回null
- 8. 会话对象返回null
- 9. php JSON对象返回null
- 10. NULL返回时为对象
- 11. 改造返回null对象
- 12. 返回类对象或无对象
- 13. 得到返回的返回类型是对象的引用吗?
- 14. java中的通用返回类型返回对象
- 15. 对annonymus对象的Gson“toJson”返回null
- 16. Realm.objects(类型)返回空的对象
- 17. 表单对象的返回类型
- 18. linq返回关联的对象类型
- 19. Spinner.getItemAtPosition(...)返回什么类型的对象?
- 20. ObjectForID返回什么类型的对象
- 21. Java:返回对象的检测类型
- 22. 返回类型对象的方法
- 23. 返回子类对象的泛型getter
- 24. 返回不返回对象
- 25. 返回新类型和返回对象有区别吗?
- 26. 如何为返回类型为枚举的方法返回null?
- 27. 从返回一个C++对象的函数中返回null
- 28. 基本的Java对象类返回对象为null?
- 29. 投掷对象返回原始类型
- 30. 返回通用对象类型
'NULL'是一个int? – 2013-06-03 18:22:43
顺便说一句,返回一个引用并抛出。或者返回一个指针,然后你可以返回NULL。 – 2013-06-03 18:23:08
@ H2CO3 NULL为0,因此如果它在指针上下文之外使用,则将被视为“int”(例如,用于出现错误消息)。 – zwol