我今天注意到 boost::optional::is_initialized()
在 Boost 1.64.0 参考 中被标记为已弃用。我的项目大量使用 is_initialized()
检查 boost::optional
是否包含值。
我看不到任何其他方法可以正确测试 boost::optional
是否已初始化,我是否遗漏了什么?
The boost::optional
has a explicit operator bool()
, meaning that I can do if(foo){...}
if foo
is a boost::optional
. However, this would give wrong results if foo
is a boost::optional<bool>
or some other boost::optional<T>
where T
is convertible to bool
.
Boost 希望用户做什么?
原文由 Bernard 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,因为没有对基础类型的隐式转换。可选项的“真实性”¹ 总是 指其初始化状态。
只有在关系运算符中才会有隐式转换发生的 _印象_。但是,这并不是对底层类型进行隐式转换,而是显式地 提升 运算符。
¹我的意思是上下文(显式)布尔转换
更新
确实对于
boost::optional<bool>
在 c++11 之前的模式中 有一个警告:在这种情况下,明确比较
boost::none
显然更好。