簡體   English   中英

在 std::set (c++) 中獲取指向 object 的指針

[英]Get a pointer to an object in a std::set (c++)

我有一個標准集 S。S 包含幾個 MyType 實例。 這是在 S 中獲取指向 MyType 實例的最佳方法嗎?

MyType *pointerToMyType = (MyType*)(&*S.find(anotherInstanceOfMyType));

上面的代碼有效。 我只是不確定這是最好還是最安全的方法。

編輯:我確實在上述行之前檢查了 find 到 S.end() 的結果。

編輯:刪除強制轉換會導致以下編譯時錯誤:“從 'const MyType*' 到 'MyType*' 的無效轉換”

不應將可變引用或指針指向set中的元素。 如果您更改它的屬性,那么您將使容器的不變量無效,從而導致未定義的行為。 編譯時錯誤的存在是有充分理由的,此外,您的代碼展示了一個很好的例子,說明了為什么 C 風格的強制轉換不好——因為它們可以拋棄 const,而其他回答者都沒有注意到,而如果你曾經被迫使用const_cast ,每個人都會注意到那有多糟糕。

但是,如果您采用有效的const MyType* ,那么強制轉換將是多余的,並且&*iterator是 go 的一個非常好的方法。

兩件事情,

  1. static_cast
  2. 在抓取指針之前,您應該真正檢查集合中是否存在 object。

至於方法,如果你充實你正在嘗試做的事情,可能會有更好的方法......

編輯:哎呀, static_cast也是多余的......習慣,每當我看到 C 風格的演員......

你所擁有的很好,雖然:

  • 您可能應該在取消引用之前檢查迭代器是否有效。
  • 不需要演員陣容。

假設你知道元素存在......

這是在 S 中獲取指向 MyType 實例的最佳方法嗎?

不,你不需要演員表。 如果你這樣做了,它不應該是 C 演員,它應該是const_cast

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM