C++ boost::可选返回bool值';我不总是工作
我遇到了一个我无法解决的问题,希望有人能帮助我 (gcc 4.7.2,boost 1.59) 现在,我无法理解的是,为什么上面的代码无法编译,下面的代码无法编译,为什么从函数返回时会转换为C++ boost::可选返回bool值';我不总是工作,c++,boost,C++,Boost,我遇到了一个我无法解决的问题,希望有人能帮助我 (gcc 4.7.2,boost 1.59) 现在,我无法理解的是,为什么上面的代码无法编译,下面的代码无法编译,为什么从函数返回时会转换为bool if(func()) // optional actually exists 注意:我还注意到IsValidTest()在visual studio上没有给出任何编译错误 任何备受赞赏的帮助都定义了一种价值观 explicit意味着编译器不会为您执行隐式转换,您必须指定要调用运算符 您使用了
bool
if(func())
// optional actually exists
注意:我还注意到IsValidTest()
在visual studio上没有给出任何编译错误
任何备受赞赏的帮助都定义了一种价值观
explicit
意味着编译器不会为您执行隐式转换,您必须指定要调用运算符
您使用了
,但您也可以使用static\u cast()
。它适用于if
,因为if
语句有关于运算符bool
的特殊规则,即在计算表达式时忽略显式标识符。
“解决方案是使用
return !!func();
return !!func();
否。显式地将可选转换为bool
只需检查是否存在值,即是否为空。这是通过显式操作符bool()
实现的,与iostream非常相似
optional
实例在概念上充当可以为null的指针,显式转换为bool
检查是否为null
要获取指向的对象(如果有),请使用*
从逻辑上取消引用(概念)指针。如果可选
为空,则会引发异常。或者在指针视图中,如果(概念)指针为空
由于您需要一个bool
值作为函数的返回值,因此在optional
为空的情况下,您必须决定想要什么。boost::optional应该可以转换为两个bool,我认为这是不明确的。您必须使用旧版本的M$VS,不支持显式
关键字。是的,我在使用Visual Studio 2012Re“它适用于if
,因为if
语句需要bool
”,不,它适用于if
,因为if
需要一个条件,这对显式运算符bool()
有一个特殊的规则。例如,仅将可选的直接用作bool
变量的初始值设定项将不起作用。我不太理解您的观点,即“仅将可选的直接用作bool变量的初始值设定项将不起作用”您能给出一个建议吗example@BubbleBoy我的解释有点错误。它说这个bool b=returnOptional()代码>可以工作,但它确实可以not@BubbleBoy:bool b=some_可选代码>无法编译。此上下文需要bool
值,但没有到bool
的隐式转换。需要bool
值的上下文不足以触发显式转换。
if(func())
// optional actually exists
return !!func();