我想知道为什么在 STL 中的许多模板算法中,参数不是通过引用传递,而是通过值传递。以下是<iterator
> 标头中的示例:
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (InputIterator first, InputIterator last);
当我将两个迭代器传递给这个函数时,它们会被复制。我天真的想法是最好通过 const-reference 传递这些迭代器以避免复制迭代器对象:
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (const InputIterator &first, const InputIterator &last);
可以说迭代器通常是非常小的对象,并且复制它们并不昂贵。但即便如此:便宜的复制会比不复制更昂贵。
那么在 STL 版本中,迭代器是按值传递的原因是什么?
谢谢!