对于输入迭代器,如果其中一个迭代器已经失效,那么比较相等性的要求是什么?
input_iter x = foo();
input_iter y = x;
++x;
return x == y; // What must this return?
在上面的示例中,解除引用y
显然是未定义的,但是这是如此定义的相等比较的结果吗?阅读cppreference.com,绝对是两个输入迭代器必须比较true
的情况,如果它们实际上是相同的,因为输入迭代器必须满足EqualityComparable
,但我实际上看不到任何说法如果不相同,结果必须是什么。我是否允许始终从true
返回operator==
(除非与结束迭代器进行比较时)?
答案 0 :(得分:2)
" 对于输入迭代器,如果其中一个迭代器已经失效,那么比较相等性的要求是什么?"
没有。引用 ISO / IEC 14882:2003(E),[lib.input.iterators] ,
==
是在其域上的等价关系,(强调添加)
在bool(a==b) != bool(a!=b)
的域==
(强调添加)
而且,
的范围内
r
之前[{1}}之前的值的任何副本都不再存在 ......在++r
。
对于无效的输入迭代器,==
或==
没有要求任何特定行为。