我刚刚在一些遗留代码中发现了对不同容器的迭代器之间的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
答案 0 :(得分: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.
有更多输出,但我认为这应该涵盖它。此前一个帖子covers the same thing for Visual Studio。