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