STL の多くのテンプレート アルゴリズムで、引数が参照ではなく値で渡されるのはなぜだろうか。<iterator
> ヘッダーの例を次に示します。
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (InputIterator first, InputIterator last);
この関数に 2 つの反復子を渡すと、それらがコピーされます。私の素朴な考えでは、イテレータ オブジェクトのコピーを避けるために、これらのイテレータを const-reference で渡す方がよいでしょう。
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (const InputIterator &first, const InputIterator &last);
イテレータは一般に非常に小さなオブジェクトであり、それらのコピーは高価ではないと言えます。それでもなお、安価なコピーは、まったくコピーしないよりも高価になります。
では、STL バージョンで反復子が値渡しされる理由は何ですか?
ありがとうございました!