C++ Boost可选隐式转换为bool?

C++ Boost可选隐式转换为bool?,c++,boost,googletest,boost-optional,C++,Boost,Googletest,Boost Optional,我在读一些代码,我遇到了一些我不理解的东西。 关于测试Boost::可选值是否初始化的问题。它使用gtest框架,该框架提供了ASSERT\u TRUE()宏 #include "gtest\gtest.h" void test() { boost::optional<someClass> opt = someFunc(); ASSERT_TRUE(!!opt); } #包括“gtest\gtest.h” 无效测试(){ boost::opt=someFunc()

我在读一些代码,我遇到了一些我不理解的东西。 关于测试Boost::可选值是否初始化的问题。它使用gtest框架,该框架提供了
ASSERT\u TRUE()

#include "gtest\gtest.h"

void test() {
    boost::optional<someClass> opt = someFunc();
    ASSERT_TRUE(!!opt);
}
#包括“gtest\gtest.h”
无效测试(){
boost::opt=someFunc()可选;
断言为真(!!选择);
}
为什么我需要
opt
之前?
boost::optional
是否未隐式转换为宏所需的bool?我认为使用
ASSERT\u TRUE(opt)
检查opt是否具有正确的值就足够了

boost::可选的
是否未转换为bool


不,不是。它到
bool
的转换操作符被标记为
explicit
,但是您的测试框架需要隐式转换的东西。您应该看到普通
bool test=opt的问题太多:这应该无法编译。

我理解,但如果我读对了这篇文章:,它是隐式转换的吗?这是否已更改?@Suv
if(my_可选)
将编译,即使转换运算符是显式的,因为这是一个。另外,根据Boost的版本以及是否启用了c++11等,
可选
可能会将安全bool习惯用法用于bool转换,这也是一种隐式转换,但会阻止编译一些有问题的用法。