使用提升iterator_facade的恒定正确性
Const correctness with Boost iterator_facade
我正在编写一个迭代器外观,用于包装到另一个类中的集合。我按照教程进行操作,直到说出真相,其中指出:
现在
node_iterator
和node_const_iterator
的行为完全符合您的预期......几乎。我们可以比较它们,我们可以在一个方向上转换: 从node_iterator
到node_const_iterator
.如果我们尝试从node_const_iterator
转换为node_iterator
,当转换构造函数尝试初始化node_iterator
的m_node
时,我们会得到一个错误,一个带有node const*
的node*
。那么问题出在哪里呢?
对我来说,这似乎正是我想要的,即无法将常量迭代器转换为非常量迭代器。似乎可以进行转换,因为迭代节点将失去const
限定符。
我错过了什么吗?我问是因为我的一些代码无法编译,这是一个可能的原因。
你不能在章节中途停止阅读。源材料的下一行告诉您为什么这是一个问题:我们希望转换本身不存在。实际上,转换存在,但在实现内部的调用堆栈中以某种方式失败,这导致诊断不清晰,并且boost::is_convertible<node_const_iterator,node_iterator>
特征中断。
相关文章:
- 代理对象的常量正确性
- std::函数常量正确性未遵循
- 违反const正确性:我应该现实地期待什么问题
- C++ 常量正确性/缺少支持常量和非常量实例的类的常量构造函数
- 自定义引用包装器的常量正确性
- 引用类型的数据成员提供有关恒常正确性"loophole"
- 初始化期间针对安全检查的指针的恒定正确性
- 如果我公开常量和非常量 API,我是否破坏了常量正确性?
- 如何强制实施有关指针数据成员的常量正确性
- 康斯特正确性建议
- 返回带或不带 *this 的变量的确切方式不同 |这不是关于*此指针|正确性
- C++中未对齐访问的正确性
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 由非const类处理的数据的const正确性
- 将 std::atomic<bool> 与 std::mutex 结合使用的正确性
- 如何在C++的多维地图中实现常量正确性
- 将函数赋值给函数指针,常量参数正确性
- C++ 函数参数或声明中的常量正确性
- 结构初始化中的常量正确性
- memcpy和const正确性