C++标准中是否有要求迭代器两次解引用返回相同值的正式规定?
C++迭代器两次解引用的一致性要求
迭代器的行为由其所属的迭代器类别决定:
- 输入迭代器:标准明确允许这类迭代器仅支持单遍访问,两次解引用可能返回不同值,甚至解引用后迭代器状态会发生变化(比如
istream_iterator),因此你的assert(v1 == v2)无法保证成立。 - 前向迭代器及更高级别(包含双向、随机访问、连续迭代器):标准要求这类迭代器的解引用结果是稳定的——只要迭代器未被修改(如自增、赋值操作),多次解引用必须指向同一个对象。只要该对象在两次解引用之间没有被外部修改,两次解引用得到的值必然相等,你的
assert符合标准预期。
- 输入迭代器:标准明确允许这类迭代器仅支持单遍访问,两次解引用可能返回不同值,甚至解引用后迭代器状态会发生变化(比如
关于
equality_preservation:它规范的是操作不会改变迭代器的相等性,和解引用结果的稳定性分属不同标准条款,你并没有遗漏。
C++标准中对前向迭代器的核心要求之一:相等的前向迭代器在未被修改时,解引用结果指向同一个对象。这直接保证了无外部修改时,同一迭代器的两次解引用值相等。
内容的提问来源于stack exchange,提问作者Damir Tenishev
相关产品推荐
相关产品推荐

