C++InputIterator
は、反復子の概念の最も限定されたタイプの 1 つです。逆参照、等価比較、プリインクリメントとポストインクリメント (およびポストインクリメントと逆参照) のサポートのみが保証されています。
InputIterator
オブジェクトは多くの場合、任意のストリームを反復するため、同じ入力を 2 回反復しても同じ値が得られるとは限りません 。
operator *
ただし、反復子をインクリメントしないという条件で、逆参照演算子 が逆参照するたびに同じ値を返すことが保証されている場合、私は混乱しています。
たとえば、概念の要件を満たし、終了位置に等しくない、またはそれを超えていないstd::begin(some_input_stream)
オブジェクトを返すと仮定します。InputIterator
it
auto it = std::begin(some_input_stream);
auto value1 = *it;
auto value2 = *it;
assert(value1 == value2);
value1
と同じ値であることが保証されていますvalue2
か? (もちろん、どのような型*it
が生成されても、正常な等値比較セマンティクスを実装することを前提としています)