将可选的隐式转换为布尔值?

Boost Optional implicit conversion to bool?

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

#include "gtest\gtest.h"

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

为什么我需要 !!opt 之前? boost::optional 是否没有隐式转换为宏需要的布尔值?我认为使用 ASSERT_TRUE(opt) 检查 opt 值是否正确就足够了?

Is a boost::optional not impicit converted to a bool

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