进一步满足输出迭代器要求的迭代器称为可变迭代器。不可变迭代器被称为常量迭代器。[24.2.1:4]
这表明您可以有一个可变的输入迭代器,它同时满足输入和输出迭代器的要求。
在增加输入迭代器后,其旧值的副本不需要可取消引用 [24.2.3]。但是,标准对输出迭代器的规定并不相同。事实上,后缀增量的操作语义被给出为{ X tmp = r; ++r; return tmp; }
,这表明输出迭代器可能不会使旧迭代器值无效(副本)。
那么,增加一个可变输入迭代器可以使旧的迭代器副本失效吗?
如果是这样,您将如何支持类似X a(r++); *a = t
或X::reference p(*r++); p = t
使用(例如)代理对象的代码?
如果不是,那么为什么boost::iterator
声称它需要一个代理对象?(链接是代码;向下滚动以阅读关于struct
swritable_postfix_increment_proxy
和的评论postfix_increment_result
)。也就是说,如果您可以返回旧迭代器值的(可取消引用)副本,为什么需要将此副本包装在代理中?