c++ - boost::可选的函数返回

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

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

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

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

最佳答案

这是我喜欢使用的样式。返回的 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 条。

关于c++ - boost::可选的函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577774/

相关文章:

c++ - 使用 const_cast 实现移动构造函数

c++ - 使用多个键(例如参数对/元组)访问 boost 多索引容器上下文

javascript - 为什么 + 符号是 javascript 中的异常(exception)?

Objective-C 隐式转换将整数精度 'NSUInteger' (又名 'unsigned long' )丢失为 'int' 警告

c++ - 访问不同类中的顶级变量和方法

c++ - Boost.Asio:不能使用 std::bind() 来指定回调

c++ - OpenGL 后端渲染

c++ - 创建 boost::file_mapping 对象的成本?

c++ - 这是通过网络发送序列化对象的好概念吗?

R: ifelse 把 numeric(0) 变成 NA