C++ Boost可选隐式转换为bool?
我在读一些代码,我遇到了一些我不理解的东西。 关于测试Boost::可选值是否初始化的问题。它使用gtest框架,该框架提供了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()
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的问题代码>太多:这应该无法编译。我理解,但如果我读对了这篇文章:,它是隐式转换的吗?这是否已更改?@Suvif(my_可选)
将编译,即使转换运算符是显式的,因为这是一个。另外,根据Boost的版本以及是否启用了c++11等,可选
可能会将安全bool习惯用法用于bool转换,这也是一种隐式转换,但会阻止编译一些有问题的用法。