C++ 限制“反向迭代器”的原因`

C++ 限制“反向迭代器”的原因`,c++,stl,iterator,C++,Stl,Iterator,我发现下面这句话 std::reverse_迭代器不适用于返回对的引用的迭代器 成员对象(所谓的“隐藏迭代器”)。藏匿的一个例子 迭代器是std::filesystem::path::iterator 这种说法正确吗?如果是,原因是什么 对我来说,这个限制毫无意义,因为我假设反向迭代器基本上交换了运算符+++和运算符--(并将底层迭代器存储为1) 编辑:显然,这个问题可能会被误解: 我知道我们需要一次递减操作来实现反向迭代器。问题是为什么在构建反向迭代器时不实现这一点。这样就避免了隐藏迭代器的问

我发现下面这句话

std::reverse_迭代器
不适用于返回对的引用的迭代器 成员对象(所谓的“隐藏迭代器”)。藏匿的一个例子 迭代器是
std::filesystem::path::iterator

这种说法正确吗?如果是,原因是什么

对我来说,这个限制毫无意义,因为我假设反向迭代器基本上交换了
运算符+++
运算符--
(并将底层迭代器存储为1)

编辑:显然,这个问题可能会被误解: 我知道我们需要一次递减操作来实现反向迭代器。问题是为什么在构建
反向迭代器时不实现这一点。这样就避免了隐藏迭代器的问题。但显然这不是它的实现方式,每次迭代器被取消引用时都会进行递减。为什么?

并将底层迭代器存储为1


这就是原因。在取消引用时,您必须通过一个迭代器变出一个not off,如果对变出的迭代器的破坏使从它获得的引用无效(就像隐藏迭代器的情况一样),那么鼻恶魔。

好的,我看到了误解。当我写一个
存储的
时,我的意思是在构造反向迭代器的过程中,底层迭代器需要递减。我知道我们需要在某个点上递减来实现反向迭代器,但我认为在构造过程中可以做一次。那么你提到的问题就避免了。显然,事情不是这样的。那么,为什么不能使用构造期间递减迭代器方法呢?“对不起,如果这个问题在这方面不清楚的话。”安德烈亚斯。因为您得到的迭代器可能不是可递减的。考虑<代码> rEnter()/<代码>,它是由<代码>开始()/代码>。根据定义,
begin()。