1

我正在测试使用具有函数 foo 的接口。这是我在我的模拟中对这个函数的实现:

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()。为什么不是?

4

2 回答 2

1

迭代器只有在指向同一个容器时才具有可比性。默认构造的迭代器根本不指向容器,因此它与定义上的任何东西都不兼容。

于 2013-04-12T14:58:38.997 回答
0

也许 VS 使用默认构造的迭代器来实现它们的迭代器兼容性检查,这样默认构造的迭代器永远不会与任何其他迭代器兼容,即使是默认构造的迭代器也是如此。

于 2013-04-12T14:50:15.273 回答