【问题标题】:boost::optional return from functionboost::optional 从函数返回
【发布时间】:2013-12-13 23:30:49
【问题描述】:

我正在查看一些生产代码,其中一个函数说它将返回 boost::optional,但它只返回 double:例如

boost::optional<double> Foo(){
   double a = 1.0;
   double b = 2.0;
   return a + b;
}

这是可接受的样式/是否存在不安全的情况?

【问题讨论】:

    标签: c++ boost implicit-conversion boost-optional


    【解决方案1】:

    这是我喜欢使用的风格。返回的 double 将被隐式转换为 boost::optional 已设置并包含该 double 的值。我想不出任何不安全的情况。编辑:当 optional 持有的类型为 bool 时,有一些注意事项 - 请参阅文档。

    此转换将使用此 boost::optional 构造函数:

    boost::optional ( T const& v )
    

    在这种情况下,T 是双倍的。请注意,此构造函数不是显式的,它的设计正是为了允许您的示例中的代码!

    如果在其他地方,该函数需要返回一个尚未设置的可选对象,则返回 boost::optional()。

    参考文献:

    http://en.cppreference.com/w/cpp/language/implicit_cast - 有关返回值,请参见第 3 条。

    【讨论】:

    • 如何将一个 double 传递给一个接受可选 double 的函数?
    • 是的,这也可以。
    • 出于好奇:使用这种风格有什么好处?我的意思是对于 OPs 方法,optional 永远不会为空
    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2013-06-01
    • 2011-12-19
    • 2014-03-02
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多