使用Boost iterator_facade构造const正确性

时间:2016-01-25 14:12:24

标签: c++ boost

我正在编写一个迭代器外观,用于包含在另一个类中的集合。我按照教程直到telling the truth,其中指出:

  

现在node_iteratornode_const_iterator的行为完全符合您的预期......差不多。我们可以对它们进行比较,我们可以向一个方向转换:从node_iteratornode_const_iterator。如果我们尝试从node_const_iterator转换为node_iterator,当转化构造函数尝试初始化node_iterator的{​​{1}},m_node时,我们会收到错误使用node*。那有什么问题?

对我而言,这似乎正是我想要的,即无法将const迭代器转换为非const迭代器。看似可能的转换可能是const正确性失败,因为迭代节点会失去node const*限定符。

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

1 个答案:

答案 0 :(得分:2)

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