我正在阅读一些代码而且我遇到了一些我不理解的东西。
它是关于测试是否初始化Boost :: optional值。它使用提供ASSERT_TRUE()
宏的gtest框架。
#include "gtest\gtest.h"
void test() {
boost::optional<someClass> opt = someFunc();
ASSERT_TRUE(!!opt);
}
为什么!!
之前需要opt
? boost::optional
是否未隐式转换为bool,这是宏所需要的?我认为使用ASSERT_TRUE(opt)
来检查opt是否包含正确的值就足够了吗?
答案 0 :(得分:8)
是否
boost::optional
没有被非法转换为布尔
不,不是。它的bool
转换运算符标记为explicit
,但您的测试框架需要隐式转换的内容。您应该看到普通bool test = opt;
的问题:它应该无法编译。