我正在阅读一些代码,但遇到了一些我不明白的事情。
它是关于测试 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 是否持有正确的值就足够了吗?
最佳答案
Is a
boost::optional
not impicit converted to a bool
不,不是。它到 bool
的转换运算符被标记为 explicit
,但是您的测试框架需要一些可以隐式转换的东西。您也应该看到普通 bool test = opt;
的问题:它应该无法编译。
关于c++ - 将可选的隐式转换为 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912520/