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


  现在,node_iteratornode_const_iterator的行为完全符合您的期望……几乎。我们可以比较它们,并且可以在一个方向上转换:从node_iteratornode_const_iterator。如果尝试从node_const_iterator转换为node_iterator,则当转换构造函数尝试初始化node_iteratorm_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/

10-11 20:55