繁体   English   中英

使用std :: pair的C ++ const正确性

[英]C++ const correctness with std::pair

我维护一个容器类,其接口类似于std::map / std::unordered_map

接口声称存储std::pair<const X,Y> (即value_type是什么)。 但是,在内部,实现存储了std::pair<X,Y>的排序数组。

当前实现使用reinterpret_cast来实现迭代器。 我的问题是,有更好的选择吗?

转向存储std::pair<const X,Y>数组是不可能的,因为实现需要复制数组中的元素以实现插入和删除。 其中一种方法是使用std::sort


编辑:虽然我相信reinterpret_cast调用未定义的行为(或实现定义?)我还没有遇到一个编译器,这不起作用 - 我不担心什么?


迭代器的解引用的当前实现:

template <class K, class M>
std::pair<const K,M>& operator*() {
  std::pair<K,M>& result = ...;
  return *reinterpret_cast<std::pair<const K,M>*)(&result);
}

我相信你不能通过返回一个std::pair来解决这个问题。 相反,您将不得不返回看起来像标准对的代理对象,但如果更新second成员,它会传播到主容器,而第一个成员则根据需要公开为const

“更好的选择?” reinterpret_cast什么问题? 在这种情况下,由于您在具有兼容(实际上是相同)表示的对象之间进行转换,因此转换甚至是明确定义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM