4

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

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

这是可接受的风格/是否有任何不安全的情况?

4

1 回答 1

7

这是我喜欢使用的风格。返回的 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。

于 2013-12-13T23:50:02.383 回答