8

我有以下测试:

BOOST_CHECK_NE(pointer, nullptr);

编译失败是因为

/xxx/include/boost/test/tools/detail/print_helper.hpp:50:14: 错误:'operator<<' 的重载不明确(操作数类型是'std::ostream {aka std::basic_ostream}' 和' std::nullptr_t')

出了什么问题,我应该如何测试空指针?

4

2 回答 2

9

检查指针是否为非空的最简单方法是:

BOOST_CHECK(pointer);

空指针隐式转换为false,非空指针隐式转换为true

至于您的用例的问题是:nullptr不是指针类型,它是 type std::nullptr_t。它可以转换为任何指针类型(或指向成员类型的指针)。<<但是,对于插入std::nullptr_t流没有重载。您必须强制nullptr转换为适当的指针类型才能使其工作。

于 2016-06-07T08:07:55.963 回答
3

如错误消息中所述,nullptr具有模棱两可的重载。

BOOST_CHECK(pointer);

或者

BOOST_CHECK_NE(pointer, static_cast<decltype(pointer)>(nullptr));

应该做的工作。

于 2016-06-07T08:08:07.590 回答