4

我刚刚在一些遗留代码中发现了对不同容器迭代器之间的 std::distance 的严重误用。类似于包含的代码。现在我担心有人可能在代码的其他部分犯了同样的错误。

有没有办法在编译或运行时检测到这种错误?

// bad code to explain the problem
std::vector<int> v1={1};
auto iterv1=v1.begin();
std::vector<int> v2=v1;
int nDist=std::distance(v2.begin(),iterv1); // error distance calculated between 2 containers
4

1 回答 1

3

所以如果我尝试这个例子并在g++我编译-D_GLIBCXX_DEBUG

    std::vector<int>
      v1, v2 ;

    std::distance( v1.begin(), v2.end() ) ;

我在运行时看到此错误:

error: attempt to compute the different between two iterators from
different sequences.

还有更多输出,但我认为这应该涵盖它。这个先前的线程涵盖了 Visual Studio 的相同内容

于 2013-03-15T14:04:54.987 回答