【发布时间】:2016-02-06 16:26:10
【问题描述】:
关于InputIterator/OutputIterator-s 将其语义修改为仅移动是否一致?当然,我的意思只是新创建的自定义迭代器,而不是 STL 的。
对++i 和++r 输入和输出迭代器表达式的语义要求的注释相应地表示:
后置条件:
i的先前值的任何副本不再需要可取消引用或位于==的域中。在此操作之后,
r不需要是可递增的,并且r的先前值的任何副本都不再需要是可取消引用或可递增的。
我认为在大多数情况下禁止拥有输入/输出迭代器的副本更安全,但从未听过这样的建议。这是个坏主意吗?
【问题讨论】:
-
如果我有一台时间机器,让这些迭代器在 C++98 中只移动将是我的首选。使您的自定义输入/输出迭代器只移动是一个安全的实验。如果您尝试将它们与尝试复制它们的代码一起使用,您将在编译时收到警报,然后您可以检查这种情况。它甚至可能指出该通用代码中的错误。