我想知道为什么在 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 版本中,迭代器是按值传递的原因是什么?
谢谢!
最佳答案
我想到的一件事是违反引用中的 const
特性:迭代器在使用时需要修改。
另一个实现细节可能是迭代器实际上只是作为指针实现的。在大多数情况下,引用也是如此。如果按值传递指针,则复制一次,但仅在需要时取消引用它。但是,如果迭代器指针本身由引用指针传递,则 那个 strong> 必须首先取消引用,只是为了到达迭代器,并且每次访问迭代器时都必须这样做。那是多余的。
关于c++ - 按值与按引用传递标准算法迭代器参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988299/