根据(优秀)问题C++ OutputIterator post-increment requirements,我们观察到对于 type 的可取消引用和可递增值r
以及适当类型的OutputIterator
值X
,表达式o
*r++ = o;
是有效的并且具有等效的语义
X a(r);
++r;
*a = o;
但是,如果在中间期间多次增加,是否仍然a
是可取消引用分配的情况?r
也就是说,这段代码有效吗?
X a(r);
++r;
++r;
*a = o;
很难看出对一个值的操作如何影响对另一个值的操作的有效性,但例如InputIterator
(24.2.3) 在后置条件下具有++r
:
之前的值的任何副本
r
不再需要是可解引用的或在 的域中==
。
相关部分:24.2.2 迭代器、24.2.4 输出迭代器、17.6.3.1 模板参数要求。
此外,如果这不需要有效,是否存在利用其无效性有助于实现OutputIterator
类型(效率、简单性)同时仍遵守现有要求的任何情况?