Мне интересно, почему во многих шаблонных алгоритмах в STL аргументы не передаются по ссылке, а скорее по значению. Вот пример из заголовка <iterator
> :
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (InputIterator first, InputIterator last);
Когда я передаю две итератора этой функции, они копируются. Мои наивные мысли состоят в том, что было бы лучше передать эти итераторы с помощью const-ссылки, чтобы избежать копирования объектов итератора:
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (const InputIterator &first, const InputIterator &last);
Можно сказать, что итераторы - это вообще очень маленькие объекты и что их копирование не дорого. Но даже еще: дешевое копирование будет дороже, чем вообще никакого копирования.
Итак, в чем причина того, что в STL-версии итераторы передаются по значению?
Спасибо!