4

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

#include "gtest\gtest.h"

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

为什么我需要!!before opt?a 是否boost::optional未隐式转换为宏所需的布尔值?ASSERT_TRUE(opt)我认为使用它来检查 opt 是否具有正确的值就足够了?

4

1 回答 1

9

boost::optional不是隐含转换为布尔值

不,这不对。它的转换运算符为bool被标记explicit,但您的测试框架需要一些可以隐式转换的东西。您也应该看到 plain 的问题bool test = opt;:应该无法编译。

于 2016-01-20T23:25:35.433 回答