使用提升iterator_facade的恒定正确性

Const correctness with Boost iterator_facade

本文关键字:正确性 facade iterator      更新时间:2023-10-16

我正在编写一个迭代器外观,用于包装到另一个类中的集合。我按照教程进行操作,直到说出真相,其中指出:

现在node_iteratornode_const_iterator的行为完全符合您的预期......几乎。我们可以比较它们,我们可以在一个方向上转换: 从 node_iteratornode_const_iterator .如果我们尝试从 node_const_iterator 转换为 node_iterator ,当转换构造函数尝试初始化 node_iteratorm_node时,我们会得到一个错误,一个带有node const*node*。那么问题出在哪里呢?

对我来说,这似乎正是我想要的,即无法将常量迭代器转换为非常量迭代器。似乎可以进行转换,因为迭代节点将失去const限定符。

我错过了什么吗?我问是因为我的一些代码无法编译,这是一个可能的原因。

你不能在章节中途停止阅读。源材料的下一行告诉您为什么这是一个问题:我们希望转换本身不存在。实际上,转换存在,但在实现内部的调用堆栈中以某种方式失败,这导致诊断不清晰,并且boost::is_convertible<node_const_iterator,node_iterator>特征中断。