出力反復子の要件をさらに満たす反復子は、可変反復子と呼ばれます。変更不可能な反復子は、定数反復子と呼ばれます。[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
のコメントを読んでください)。つまり、古い反復子の値の (逆参照可能な) コピーを返すことができる場合、なぜこのコピーをプロキシでラップする必要があるのでしょうか?writable_postfix_increment_proxy
postfix_increment_result