Я трохи плутають з применимостью reinterpret_cast
проти static_cast
. З того, що я прочитав, загальні правила - це використовувати статичний формат, коли типи можна інтерпретувати під час компіляції, отже, слово static
. Це команда, яку компілятор C ++ використовує внутрішньо для неявних кастів.
reinterpret_cast
s застосовуються у двох сценаріях:
- перетворити цілі типи в типи вказівників і навпаки
- перетворити один тип вказівника в інший. Загальна думка, яку я розумію, це, що це малопомітно, і цього слід уникати.
Там, де я трохи заплутався - це одне використання, яке мені потрібно, я дзвоню C ++ з C і код C повинен триматися за об'єкт C ++, так що він в основному містить void*
. Який склад слід використовувати для перетворення між void *
типом та класом?
Я бачив використання обох static_cast
і reinterpret_cast
? Хоча з того, що я читав, це виглядає static
краще, тому що амплуа може статися під час компіляції? Хоча це говорить про використання reinterpret_cast
для перетворення з одного типу вказівника в інший?
reinterpret_cast
не відбувається під час виконання. Вони обидва заяви про час збирання. З en.cppreference.com/w/cpp/language/reinterpret_cast : "На відміну від static_cast, але подібно до const_cast, вираз reinterpret_cast не компілюється в жодні інструкції процесора. Це суто директива компілятора, яка доручає компілятору обробляти послідовність бітів. (представлення об'єкта) вираження так, ніби він має тип new_type. "