输入迭代器的相等性比较

Equality comparison for Input iterators

对于输入迭代器,如果其中一个迭代器已失效,比较相等性的要求是什么?

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

在上面的例子中,取消引用y显然是未定义的,但是这样的相等比较的结果是否已定义?阅读 cppreference.com,这肯定是两个输入迭代器必须比较 true 如果它们实际上相同,因为输入迭代器必须满足 EqualityComparable,但我实际上没有看到任何说明如果相同,结果一定是什么。我是否可以从 operator== always return true (与结束迭代器比较时除外)?

"对于输入迭代器,如果其中一个迭代器已失效,比较相等性的要求是什么?"

有none个。引用 ISO/IEC 14882:2003(E), [lib.input.iterators],

== is an equivalence relation over its domain, (emphasis added)
bool(a==b) != bool(a!=b) over the domain of == (emphasis added)

并且,

any copies of the previous value of r [prior to ++r] are no longer ... in the domain of ==.

不要求 ==!= 对无效输入迭代器有任何特定行为。