gpt4 book ai didi

c++ - 迭代器的运算符 * 可以按值返回吗?

转载 作者:行者123 更新时间:2023-11-30 02:40:46 25 4
gpt4 key购买 nike

所以,我想了解是否允许 const_iterator(即不可变)按值返回。

我发现 *r 的返回类型应该是 reference (1) 其中referenceiterator_traits<X>::reference (2).命名明显表明它通常应该是引用类型,但它必须吗?

不同的迭代器类别在这方面有什么区别吗?

我所有的标准链接(见下文)都是 n3242(我相信是最后的 c++11 草案),但我也有兴趣了解 c++ 版本之间的区别,如果有的话。

(1) 24.2.2.2
(2) 24.2.1.11

最佳答案

前向和更强的迭代器应该有 reference是一个实际的引用类型([forward.iterators]/p1):

A class or pointer type X satisfies the requirements of a forward iterator if

  • [...]
  • if X is a mutable iterator, reference is a reference to T; if X is a const iterator, reference is a reference to const T,
  • [...]

输入迭代器可以有非引用 reference秒。 istreambuf_iterator<charT>::reference ,例如,是 charT .

标准是contradictory关于什么reference可以用于输出迭代器。引用链接的 LWG 问题,它“可以也不能是 void”。

请注意,标准本身存在:自 N4140 起,vector<bool>::iterator应该是一个随机访问迭代器,但甚至不满足前向迭代器要求,因为它的 reference需要是包装类而不是实际的引用类型。* 另一个 current proposal包括更多谎言(参见 bounds_iterator)。


*N4284 应用编辑, [vector.overview] 不再对 vector<bool>::iterator 提出任何要求超出表 96 中的那些 - 这需要前向迭代器或更强的迭代器,因此标准仍然存在。

关于c++ - 迭代器的运算符 * 可以按值返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28679881/

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