gpt4 book ai didi

c++ - 按值与按引用传递标准算法迭代器参数

转载 作者:IT老高 更新时间:2023-10-28 22:34:20 27 4
gpt4 key购买 nike

我想知道为什么在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com