2017-07-18 82 views
2

對於輸入迭代器,如果其中一個迭代器已失效,那麼比較相等性的要求是什麼?輸入迭代器的等效比較

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

在上述例子中,解除引用y顯然是未定義的,但是這樣的相等比較的結果定義?閱讀cppreference.com,這絕對是兩個輸入迭代器必須比較true如果他們真的是相同的,因爲輸入迭代器必須滿足EqualityComparable的情況,但我實際上沒有看到任何東西,說其結果必然是什麼,如果是的相同。我允許總是返回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]之外,行爲可能被定義或者它可能不被定義。 –