C++ Boost::可选<;布尔>;解引用

C++ Boost::可选<;布尔>;解引用,c++,boost,boolean,optional,boost-optional,C++,Boost,Boolean,Optional,Boost Optional,我正在检查一些代码,有如下内容: boost::optional<bool> isSet = ...; ... some code goes here... bool smthelse = isSet ? *isSet : false; 不,它们不是等价物 isSet*isSet:假表示如果isSet包含值,则获取该值,否则返回false 顺便说一句:boolsmthelse=isSet不起作用,因为运算符bool被声明为显式以下是表: boost::optional<bo

我正在检查一些代码,有如下内容:

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

不,它们不是等价物

isSet*isSet:假
表示如果
isSet
包含值,则获取该值,否则返回
false


顺便说一句:
boolsmthelse=isSet不起作用,因为
运算符bool
被声明为
显式

以下是表:

boost::optional<bool> isSet | none | true | false |
----------------------------|------|------|-------|
isSet ? *isSet : false;     | false| true | false |
isSet                       | false| true | true  |
boost::可选isSet |无|真|假|
----------------------------|------|------|-------|
伊塞特*isSet:false;|假|真|假|
是否设置为|假|真|真|
正如您在最后一列中看到的差异,其中
isSet
已被分配布尔值
false


或者,您可以使用
isSet.get\u value\u或(false)

我的意思是,在这种情况下,结果会有所不同?@EduardRostomyan当
isSet
包含一个布尔值,但该值为false。在这种情况下,smthelse的值也将为false,不是吗?@EduardRostomyan您的意思是
isSet
*isSet
?它们是不同的东西。
bool smthelse=isSet.get\u value\u或(false)可能更容易阅读。
boost::optional<bool> isSet | none | true | false |
----------------------------|------|------|-------|
isSet ? *isSet : false;     | false| true | false |
isSet                       | false| true | true  |