C ++ boost :: multi_index:iterator_to成员函数的顺序

时间:2016-06-26 20:45:08

标签: c++ internals boost-multi-index

读取boost :: multi_index引用,我发现iterator_to方法具有常量顺序。怎么可能?我的意思是,如果迭代器是一个与它所代表的value_type不同的对象,那么容​​器如何在不搜索索引的情况下找到相应的内部节点?

我能想到的唯一解决方案是容器的“内部节点”(或其任何内容)的地址与它所拥有的value_type相同(例如,将节点头放在value_type或其他东西下面) 。如果传递的参数是对interal value_type的引用,则可以通过参数的地址轻松构造相应的迭代器以获得红黑节点。

但是!! C ++标准限制怎么样,不能有两个具有相同地址的对象?对齐,填充,填充或在内存级别可能发生的任何事情呢?

1 个答案:

答案 0 :(得分:1)

您的直觉是正确的:该值是更大节点结构的一部分(如实例here所述),iterator_to仅根据{{1}的地址计算节点的地址子对象。现在,所涉及的指针算术依赖于节点(或存储值的基类)为standard-layout这一事实,这保证了指向第一个子对象(值)的指针可以转换为指向结构(节点):可以查看相关代码here