Jestem trochę mylić z stosowalności reinterpret_cast
vs static_cast
. Z tego, co przeczytałem, ogólne zasady używają rzutowania statycznego, gdy typy mogą być interpretowane w czasie kompilacji, stąd słowo static
. Jest to rzutowanie, którego kompilator C ++ używa wewnętrznie do rzutowania niejawnego.
reinterpret_cast
mają zastosowanie w dwóch scenariuszach:
- konwertuj typy liczb całkowitych na typy wskaźników i odwrotnie
- przekonwertować jeden typ wskaźnika na inny. Ogólny pomysł, jaki mam, jest taki, że nie można go przenosić i należy go unikać.
Tam, gdzie jestem trochę zdezorientowany, potrzebuję jednego użycia, wywołuję C ++ z C, a kod C musi trzymać się obiektu C ++, więc w zasadzie zawiera on void*
. Jakiej obsady należy użyć do konwersji między void *
typem a klasą?
Widziałem użycie obu static_cast
i reinterpret_cast
? Chociaż z tego, co czytałem, wydaje się static
to lepsze, ponieważ obsada może się zdarzyć w czasie kompilacji? Chociaż mówi się, aby użyć reinterpret_cast
do konwersji z jednego typu wskaźnika na inny?
reinterpret_cast
nie dzieje się w czasie wykonywania. Oba są instrukcjami kompilacji. From en.cppreference.com/w/cpp/language/reinterpret_cast : "W przeciwieństwie do static_cast, ale podobnie jak const_cast, wyrażenie reinterpret_cast nie kompiluje się z żadnymi instrukcjami procesora. Jest to wyłącznie dyrektywa kompilatora, która instruuje kompilator, aby traktował sekwencję bitów (reprezentacja obiektu) wyrażenia, jakby miało typ nowy_typ. "