Меня немного смущает применимость reinterpret_cast против static_cast. Из того, что я прочитал, общие правила заключаются в использовании статического приведения, когда типы могут интерпретироваться во время компиляции, отсюда и слово static. Это приведение, которое компилятор C++ использует внутренне для неявных приведений.
reinterpret_cast применимы в двух сценариях:
- конвертировать целочисленные типы в типы указателей и наоборот
- конвертировать один тип указателя в другой. Общая идея, которую я получаю, заключается в том, что это непереносимо и этого следует избегать.
Там, где я немного запутался, это одно использование, которое мне нужно, я вызываю C++ из C, а код C должен удерживать объект C++, поэтому в основном он содержит void*. Какое приведение следует использовать для преобразования между void * и типом класса?
Я видел использование обоих static_cast и reinterpret_cast? Хотя из того, что я читал, кажется, что static лучше, поскольку приведение может произойти во время компиляции? Хотя он говорит использовать reinterpret_cast для преобразования из одного типа указателя в другой?