簡體   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