Boost::optional<bool> 取消引用

Boost::optional<bool> dereference

我正在审查一些代码并且有这样的事情:

boost::optional<bool> isSet = ...;
... some code goes here...
bool smthelse = isSet ? *isSet : false;

所以我的问题是,最后一行是否等同于此:

bool smthelse = isSet; 

不,它们不等同。

isSet ? *isSet : false;表示如果isSet包含一个值则获取该值,否则returnsfalse.


顺便说一句:bool smthelse = isSet; 将不起作用,因为 operator bool 被声明为 explicit

这是table:

boost::optional<bool> isSet | none | true | false |
----------------------------|------|------|-------|
isSet ? *isSet : false;     | false| true | false |
isSet                       | false| true | true  |

正如您在最后一列中看到的差异,其中 isSet 已分配了布尔值 false

或者,您可以使用 isSet.get_value_or(false);