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.

より多くの出力がありますが、これでカバーできると思います。この前のスレッドは、VisualStudioについても同じことをカバーしています。

于 2013-03-15T14:04:54.987 に答える