C++InputIterator
是迭代器概念中最有限的类型之一。它只保证支持取消引用、相等比较、前增量和后增量(以及后增量和取消引用)
因为InputIterator
对象经常在任意流上迭代,你甚至不能确定在相同的输入上迭代两次会产生相同的值。
但是,我很困惑,如果取消引用运算符 ,operator *
保证每次取消引用它时都返回相同的值,前提是你永远不会增加迭代器。
例如,假设std::begin(some_input_stream)
返回一个满足InputIterator
概念要求的对象,并且it
不等于或超过结束位置:
auto it = std::begin(some_input_stream);
auto value1 = *it;
auto value2 = *it;
assert(value1 == value2);
保证与的value1
值相同?value2
(当然,前提是无论*it
产生什么类型都实现了合理的相等比较语义)