boost ::从函数返回可选

时间:2013-12-13 23:30:49

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

我正在审核一些生产代码,其中函数表示它将返回boost::optional,但它只返回double:例如

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

这种可接受的风格是否存在不安全的情况?

1 个答案:

答案 0 :(得分:7)

这是我喜欢的风格。返回的double将被隐式转换为boost :: optional,它已被设置并包含该double的值。我想不出任何不安全的情况。编辑:当由可选&lt;&gt;持有的类型时有一些警告是布尔 - 请参阅文档。

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

boost::optional ( T const& v )

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

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

参考文献:

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