我正在测试使用具有foo函数的接口。这是我在mock中实现的这个函数:
class Mock
{
public:
void foo(Foo::const_iterator begin, Foo::const_iterator end) {
_begin = begin;
_end = end;
...
}
...
Foo::const_iterator _begin;
Foo::const_iterator _end;
};
然后我有一个测试,检查是否已调用foo:
// test that function foo is not called
EXPECT_EQ(mock->_begin, Foo::const_iterator());
但是这给了我一个在Visual Studio声明迭代器不兼容的断言。如果我没有调用foo(),我本以为_begin会等于Foo :: const_iterator()。为什么不呢?
答案 0 :(得分:1)
迭代器只有在指向同一个容器时才具有可比性。默认构造的迭代器根本没有指向容器,因此根据定义它与任何东西都不兼容。
答案 1 :(得分:0)
也许VS使用默认构造的迭代器来实现它们的迭代器兼容性检查,这些迭代器的处理方式使得默认构造的迭代器永远不会与任何其他迭代器兼容,即使是默认构造的迭代器。