gpt4 book ai didi

c++ - boost::optional 返回一个 bool 值并不总是有效

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:50 30 4
gpt4 key购买 nike

我遇到了一个我无法弄清楚的问题,希望有人能提供帮助(海湾合作委员会 4.7.2, boost 1.59)

bool IsValidTest(int val) const
{
if(val > 0)
return func(); // func() returns boost::optional<SomeType>;
}

我希望可选值被隐式转换为 bool ,但编译器会提示

error: cannot convert boost::optional<SomeType> to bool in return

我确实看到了!运算符存在,因此解决方案是使用

return !!func();

现在,我想不通的是为什么上面的代码无法编译而下面的代码会编译,为什么从函数返回时转换为 bool 的问题

 if(func())
// optional actually exists

注意:我还注意到 IsValidTest() 在 vi​​sual studio 上没有给出任何编译错误

非常感谢任何帮助

最佳答案

boost::optional 定义一个 explicit operator bool .

explicit意味着编译器不会为您进行隐式转换,您必须指定要调用运算符。

您使用了 !! , 但你也可以使用 static_cast<bool>() .它适用于 if因为if声明有关于 operator bool 的特殊规则,即它忽略了 explicit评估其表达式时的标识符。

关于c++ - boost::optional 返回一个 bool 值并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648826/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com