[英]C++ How to set a pointer of type std::vector<Derived*> to object of type std::vector<Base*>
[英]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 的一個非常好的方法。
兩件事情,
static_cast
至於方法,如果你充實你正在嘗試做的事情,可能會有更好的方法......
編輯:哎呀, static_cast
也是多余的......習慣,每當我看到 C 風格的演員......
你所擁有的很好,雖然:
假設你知道元素存在......
這是在 S 中獲取指向 MyType 實例的最佳方法嗎?
不,你不需要演員表。 如果你這樣做了,它不應該是 C 演員,它應該是const_cast
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.