【发布时间】:2016-06-26 20:45:08
【问题描述】:
阅读 boost::multi_index 参考,我发现iterator_to 方法具有恒定顺序。这怎么可能?我的意思是,如果一个迭代器是一个不同于它所代表的 value_type 的对象,那么容器怎么可能在不搜索索引的情况下找到它们对应的内部节点?
我能想到的唯一解决方案是容器的“内部节点”(或其他任何东西)的地址与它所拥有的 value_type 相同(例如,将节点标头放在 value_type 的下方或其他东西) .如果传入的参数是对内部 value_type 的引用,则可以通过参数的地址轻松构造对应的迭代器,从而得到红黑节点。
但是!! C++ 标准限制不能有两个具有相同地址的对象呢?对齐、填充、填充或任何可能在内存级别发生的事情呢?
【问题讨论】:
-
C++ 标准限制不能有两个具有相同地址的对象? 为什么不能有两个对具有相同地址的对象的引用?想象一下,我有一个需要两个引用的函数,并且我为它提供了两次相同的对象?
-
如果我的记忆没有背叛我从标准中读取内容的那些时候,那么引用不是对象,并且两个引用参数都将“指向”相同且唯一的对象。根本没有违反规定的。但是,在我关于多索引容器内部的“假设”中,我们有两个不同的对象:保存在容器上的 value_type 和实际保存它的节点。
标签: c++ internals boost-multi-index