Я трохи плутають з применимостью reinterpret_castпроти static_cast. З того, що я прочитав, загальні правила - це використовувати статичний формат, коли типи можна інтерпретувати під час компіляції, отже, слово static. Це команда, яку компілятор C ++ використовує внутрішньо для неявних кастів.
reinterpret_casts застосовуються у двох сценаріях:
- перетворити цілі типи в типи вказівників і навпаки
- перетворити один тип вказівника в інший. Загальна думка, яку я розумію, це, що це малопомітно, і цього слід уникати.
Там, де я трохи заплутався - це одне використання, яке мені потрібно, я дзвоню 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. "