Ven*_*ntu 4 c++ boost googletest boost-optional
我正在读一些代码而且我遇到了一些我不理解的东西.它是关于测试是否初始化Boost :: optional值.它使用提供ASSERT_TRUE()宏的gtest框架.
#include "gtest\gtest.h"
void test() {
boost::optional<someClass> opt = someFunc();
ASSERT_TRUE(!!opt);
}
Run Code Online (Sandbox Code Playgroud)
为什么我需要!!之前的opt?是boost::optional不是隐式转换为bool,这是宏所需要的?我认为用它ASSERT_TRUE(opt)来检查opt是否保持正确值是足够的吗?
小智 8
是
boost::optional不是有义务转换为布尔
不,这不对.它的转换运算符bool已标记explicit,但您的测试框架需要可隐式转换的内容.你也应该看到普通问题bool test = opt;:它应该无法编译.