Boost可选隐式转换为bool?

时间:2016-01-20 23:18:42

标签: c++ boost googletest boost-optional

我正在阅读一些代码而且我遇到了一些我不理解的东西。 它是关于测试是否初始化Boost :: optional值。它使用提供ASSERT_TRUE()宏的gtest框架。

#include "gtest\gtest.h"

void test() {
    boost::optional<someClass> opt = someFunc();
    ASSERT_TRUE(!!opt);
}

为什么!!之前需要optboost::optional是否未隐式转换为bool,这是宏所需要的?我认为使用ASSERT_TRUE(opt)来检查opt是否包含正确的值就足够了吗?

1 个答案:

答案 0 :(得分:8)

  

是否boost::optional没有被非法转换为布尔

不,不是。它的bool转换运算符标记为explicit,但您的测试框架需要隐式转换的内容。您应该看到普通bool test = opt;的问题:它应该无法编译。