仅移动输入和输出迭代器

Ori*_*ent 2 c++ iterator move c++11

关于InputIterator / OutputIterator -s 将它们的语义修改为仅移动是否一致?当然,我指的是新创建的自定义迭代器,而不是STL迭代器。

输入和输出迭代器的语义要求++i和表达式的注释相应地表示:++r

后置条件: 先前值的任何副本i不再需要可取消引用或位于 的域中==

在此操作之后,r不再需要可递增,并且以前值的任何副本r不再需要可取消引用或可递增。

我认为在大多数情况下禁止拥有输入/输出迭代器的副本会更安全,但从未听说过这样的建议。这是坏主意吗?

cor*_*tin 5

在 C++20 中,新的迭代器概念input_iteratoroutput_iterator要求可复制。命名空间中的算法ranges以及视图适配器也支持仅移动迭代器。

新视图ranges::istream_view返回仅移动迭代器以提高安全性。最后,新的 C++20view概念本身不需要可复制性,仅允许移动其自身的状态。

仍然可以创建copyable input_iterator,但我建议不要这样做output_iteratorcopyable

forward_iterator当然,仍然需要 s copyable。哨兵还需要copyable

您可以在以下论文中阅读有关设计的内容