我正在编写一个迭代器外观,用于与包装到另一个类中的集合一起使用。我按照教程学习,直到telling the truth为止,其中指出:
现在,node_iterator
和node_const_iterator
的行为完全符合您的期望……几乎。我们可以比较它们,并且可以在一个方向上转换:从node_iterator
到node_const_iterator
。如果尝试从node_const_iterator
转换为node_iterator
,则当转换构造函数尝试初始化node_iterator
的m_node
,即带有node*
的node const*
时,将会收到错误消息。所以有什么问题?
在我看来,这正是我想要的,即无法将const迭代器转换为非const迭代器。可能的转换似乎是const正确性失败,因为迭代的节点将丢失const
限定符。
我想念什么吗?我问是因为我的某些代码无法编译,这是可能的原因之一。
最佳答案
您不能只停止阅读本章的一半。原始资料的下几行告诉您这是一个问题的原因:我们希望转换本身不存在。实际上,该转换存在,但是在实现的内部却在某种程度上失败了调用堆栈,这导致诊断不够明确,并且破坏了boost::is_convertible<node_const_iterator,node_iterator>
特性。
关于c++ - 用Boost iterator_facade进行常量正确性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34994681/