我正在编写一个迭代器外观,用于包含在另一个类中的集合。我按照教程直到telling the truth,其中指出:
现在
node_iterator
和node_const_iterator
的行为完全符合您的预期......差不多。我们可以对它们进行比较,我们可以向一个方向转换:从node_iterator
到node_const_iterator
。如果我们尝试从node_const_iterator
转换为node_iterator
,当转化构造函数尝试初始化node_iterator
的{{1}},m_node
时,我们会收到错误使用node*
。那有什么问题?
对我而言,这似乎正是我想要的,即无法将const迭代器转换为非const迭代器。看似可能的转换可能是const正确性失败,因为迭代节点会失去node const*
限定符。
我错过了什么吗?我问,因为我的一些代码无法编译,这是一个可能的原因。
答案 0 :(得分:2)
你不能只是在本章中途停止阅读。源材料的下一行告诉您为什么这是一个问题:我们希望转换本身不存在。实际上,转换存在,但是在实现的内部中调用堆栈失败了,这导致诊断不够清晰,并且boost::is_convertible<node_const_iterator,node_iterator>
特性损坏。