forward iterator iterator_traits :: reference的要求

Rya*_*ing 0 c++ iterator

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

Expression  Return      Equivalent expression
*i++        reference   value_type& temp=*i; ++i; return temp;
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我看到的标准中没有提到等效表达式.代理对象允许分配,这可能是一致性的关键.

除了试图确定要求之外,我的具体问题涉及知道是否具有value_type== reference既不是引用也不支持赋值,也适用于标准库.

将一些Container<int>带有iterator标记为forward_iterator_tagreference == int有效吗?

Bar*_*rry 5

要求在[forward.iterators]中列举:

类或指针类型X满足前向迭代器的要求

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

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