`reverse_iterator` 限制的原因

And*_* H. 5 c++ iterator stl

在reverse_iterator的cppreference页面上我发现以下评论

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

这种说法正确吗?如果是的话,这是为什么?

对我来说,这个限制没有意义,因为我假设反向迭代器基本上交换了 and operator ++operator --并将底层迭代器存储为 1)。

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

T.C*_*.C. 4

并将底层迭代器减一

这就是原因。您必须在取消引用时构造一个不相差一的迭代器,并且如果构造的迭代器的破坏使从它获得的引用无效(就像隐藏迭代器的情况一样),那么鼻恶魔。