2017-07-18 107 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]之外,行为可能被定义或者它可能不被定义。 –