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);
。
我正在审查一些代码并且有这样的事情:
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);
。