reinterpret_cast
просто позволяет конвертировать совершенно не связанные типы. Это просто обрабатывает кусок памяти как другой тип. Поэтому использовать его очень небезопасно, поскольку он не дает никаких ошибок компиляции или времени выполнения, а просто вызывает (обычно) сбой
static_cast
обеспечивает проверку правильности приведения во время компиляции. Если тип не может быть обработан как другой тип, тогда static_cast
выдает ошибку времени компиляции при попытке приведения.
Он выполняет неявные преобразования между типами (например, int в float или указатель на void *), а также может вызывать явные функции преобразования (или неявные).
Таким образом, вы можете сказать, что он может выполнять неявное приведение, для которого имеется встроенная функция неявного преобразования. Обычно это считается заменой приведения в стиле c, если это путаница.