C++ 要求 OutputIterator 类型X
支持形式的表达式r++
,其中r
是 的实例X
。这个后缀增量必须在语义上等价于:
(*) { X tmp = r; ++r; return tmp; }
并且必须返回可转换为X const&
. 在 C++11 中,请参阅 24.2.4(但这并不是新的)。在同一部分,它说
输出迭代器的算法永远不应该尝试通过同一个迭代器两次。它们应该是单通道算法。
给定(*),上面说我复制返回值,如X a(r++);
假设
r
在递增之前是可取消引用的,但没有被取消引用。是否需要a
可取消引用?如果是这样,是否必须X a(r++); *a = t;
执行与其他情况相同的任务*r++ = t;
?a
和是否有任何(其他)条件r
?否则,假设
r
在递增之前被取消引用/分配,并且其递增值(也)是可取消引用的。以下哪项(如果有)是明确定义的: (a)*a = t;
、 (b)++a; *a = t;
、 (c)*r = t;
?
另请参阅后续内容:取消引用分配给双倍递增的 OutputIterator