我正在努力弄清楚对forward_iterators'reference
类型的要求是什么。在明显的情况下,您将拥有value_type = T;
和reference = T&;
。阅读关于前向迭代器要求的cppreference page,我看到了
Expression Return Equivalent expression
*i++ reference value_type& temp=*i; ++i; return temp;
std::vector<bool>
表明“等效表达式”并不总是有效,因为它返回一个代理对象:
std::vector<bool> v(10);
auto i = v.begin();
std::vector<bool>::iterator::value_type& temp = *i; // error
// can't bind bool& to std::_Bit_reference
我看到的标准中没有提到等效表达式。代理对象允许分配,这可能是一致性的关键。
除了试图确定要求之外,我的具体问题是关于知道value_type
== reference
是否既不是参考文献也不支持作业,会与标准一致库。
Container<int>
标记为iterator
和forward_iterator_tag
的某些reference == int
是否有效?
答案 0 :(得分:5)
要求在[forward.iterators]中列举:
如果
,类或指针类型X
满足前向迭代器的要求
- 的要求
X
满足输入迭代器(24.2.3),X
满足DefaultConstructible要求(17.6.3.1),- 如果
X
是可变迭代器,则reference
是对T
的引用;如果X
是常量迭代器,则引用是引用 到const T
,- [...]
因此,如果您的容器有reference
== int
,那么它不符合forward iterator的要求。我认为技术上使vector<bool>::iterator
只是一个输入迭代器,即使它被标记为随机访问迭代器。