输入迭代器的等式比较

时间:2017-07-18 01:58:03

标签: c++ iterator input-iterator

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

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

在上面的示例中,解除引用y显然是未定义的,但是这是如此定义的相等比较的结果吗?阅读cppreference.com,绝对是两个输入迭代器必须比较true的情况,如果它们实际上是相同的,因为输入迭代器必须满足EqualityComparable,但我实际上看不到任何说法如果相同,结果必须是什么。我是否允许始终true返回operator==(除非与结束迭代器进行比较时)?

1 个答案:

答案 0 :(得分:2)

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

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

  

==在其域上的等价关系,(强调添加)
  在bool(a==b) != bool(a!=b) 的域== (强调添加)

而且,

  

r之前[{1}}之前的值的任何副本都不再存在   ......在++r

的范围内

对于无效的输入迭代器,====没有要求任何特定行为。