【发布时间】:2016-02-09 15:59:58
【问题描述】:
如果我有一个 find 函数有时无法找到所需的东西,我倾向于让该函数返回一个指针,以便 nullptr 表示找不到该东西。
例如
Student* SomeClass::findStudent(/** some criteria. */)
如果Student存在,则返回指向找到的Student对象的指针,否则返回nullptr。
我看到boost::optional 也为此目的而提倡。例如。 When to use boost::optional and when to use std::unique_ptr in cases when you want to implement a function that can return "nothing"?
我的问题是,在这种情况下,返回指针不是最好的解决方案。即有可能找不到查询的项目,在这种情况下返回 nullptr 是一个完美的解决方案。使用boost::optional(或任何其他类似的解决方案)之类的东西有什么好处?
请注意,在我的示例中,findStudent 只会返回指向 SomeClass 拥有的对象的指针。
【问题讨论】:
-
find函数返回值类型的情况如何,例如int或double? -
另外,从您的链接问题中,stackoverflow.com/a/14360932/2920343
-
@CompuChip 这有意义吗?你只是按价值返回双倍对吗?如果您希望用户能够编辑 SomeClass 拥有的内存中的特定 double,那么您将再次返回 double*。
-
@nappyfalcon:整个问题都是关于可选的。如果找不到值怎么办?
-
@nappyfalcon:
optional通过将结果按值复制到调用者(或可能在 C++11 中移动它)来解决此问题。所有权现在以临时的形式由调用者掌握,然后以具有清晰语义的方式销毁
标签: c++ c++11 boost-optional