繁体   English   中英

前向迭代器iterator_traits :: reference的要求

[英]Requirements for forward iterator iterator_traits::reference

我试图弄清楚对forward_iterators的reference类型有什么要求。 在明显的情况下,您将拥有value_type = T; reference = T&; 阅读有关正向迭代器要求的cppreference页面 ,我看到了

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 (既不是引用也不支持赋值)将与标准库一起使用。

某些带有iterator标记为forward_iterator_tag并且reference == int Container<int>是否有效?

[forward.iterators]中列举了这些要求:

如果满足以下条件,则类或指针类型X满足前向迭代器的要求:

  • X满足输入迭代器(24.2.3)的要求,
  • X满足DefaultConstructible要求(17.6.3.1),
  • 如果X是一个可变迭代器,则reference是对T的引用; 如果X是const迭代器,则reference是对const T的引用。
  • [...]

因此,如果您的容器具有reference == int ,则它不满足正向迭代器的要求。 从技术上讲,我认为vector<bool>::iterator只是一个输入迭代器,即使它被标记为随机访问迭代器也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM