C ++では、OutputIterator型X
が形式の式をサポートしている必要があります。r++
ここで、はのr
インスタンスですX
。この接尾辞の増分は、意味的に次のものと同等である必要があります。
(*) { X tmp = r; ++r; return tmp; }
に変換可能な型を返す必要がありX const&
ます。C ++ 11では、24.2.4を参照してください(ただし、これは新しいものではありません)。同じセクションで、それは言います
出力イテレータのアルゴリズムは、同じイテレータを2回通過しようとしないでください。それらはシングルパスアルゴリズムである必要があります。
上記の(*)が与えられた場合、次のように戻り値をコピーするとします。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への間接参照-割り当て