输入迭代器的相等性比较
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 ==
.
不要求 ==
或 !=
对无效输入迭代器有任何特定行为。
对于输入迭代器,如果其中一个迭代器已失效,比较相等性的要求是什么?
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==
.
不要求 ==
或 !=
对无效输入迭代器有任何特定行为。