2017-07-18 15 views
2

入力イテレータの場合、イテレータの1つが無効化されている場合、等価性を比較するための要件は何ですか?上記の例で入力イテレータの等価比較

input_iter x = foo(); 
input_iter y = x; 
++x; 
return x == y; // What must this return? 

yを逆参照すると、明らかに不定であるが、定義されたこのような等価比較の結果ですか? cppreference.comを読むと、入力イテレータはEqualityComparableを満たさなければならないので、2つの入力イテレータが実際に同じ場合はtrueを比較する必要がありますが、実際には結果が何であるかはわかりません。同じ。 常にを返すtrueoperator==から返すことができますか?(終了イテレータとの比較を除いて)?

+0

等価でない場合は 'false'を返さなければならないと思われますが、あなたが正しいとすれば、それは明白ではなく、奇妙です。 'x!= y'は'!(x == y) 'と等価であると定義されているので、ここであなたの手を強要するかもしれないことに注意する価値があります。 – tadman

答えて

2

「入力イテレータの場合、イテレータの一つが無効とされている場合は平等を比較するための要件は何ですか?

何もありません。 ISO/IECを引用14882:2003(E)、[lib.input.iterators]

==はドメイン上bool(a==b) != bool(a!=b)
(強調追加)、
そのドメイン上同値関係あります==(強調追加)

そして、

rの前の値(++rより前)のコピーは、 ... ==のドメインではなくなりました。

==又は!=が無効入力イテレータに対する任意の特定の挙動を有するという必要はありません。

+0

明確にするために、標準では質問に 'x == y'の動作が定義されていないと言っていますか? – Yakk

+0

式は未定義の動作または未定義の動作ですか? –

+0

@ M.Mそれは 'input_iter'の正確なタイプに依存します。 OPは[input.iter]が何であるかを指定しないので、[lib.input.iterators]を満たす以外は動作が定義されているか、そうでない可能性があります。 –

関連する問題