将可选的隐式转换为布尔值?
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;
的问题:应该无法编译。
我正在阅读一些代码,但遇到了一些我不明白的地方。
它是关于测试 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;
的问题:应该无法编译。