【发布时间】:2012-08-06 05:57:41
【问题描述】:
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;?
另见后续:Dereference-assignment to a doubly incremented OutputIterator
【问题讨论】:
标签: c++ iterator post-increment