Я бы, например, скорее видел reinterpret_cast <TargetType> (pointer_of_some_other_type)
, чем static_cast <TargetType> (static_cast <void*> (pointer_of_some_other_type))
или static_cast <TargetType> ((void*) (pointer_of_some_other_type))
в любое время.Эта цепочка приведений, проходящих через void *, является просто хитрым, закулисным способом избежать использования страшного reinterpret_cast.
Многие проекты запрещают использование reinterpret_cast, если не предоставлен отказ;Человек, который написал код, должен оправдать использование актеров.IMO, цепочка статических приведений хуже (намного хуже!), Чем reinterpret_cast.Цепочка имеет те же эффекты, те же проблемы, что и reinterpret_cast, но ее не так легко найти с помощью grep.
Приложение
Посмотрите наэто так.Случай 1, вы используете reinterpret_cast, вы просматриваете все обручи проекта, чтобы оправдать его использование, менеджер проекта дает отказ.Спустя месяцы прослеживается ошибка при использовании вами dynamic_cast.У вас есть бесплатная карта.Это задница менеджера проекта, которая готова дать вам эту карту.
Случай 2, вы используете хитрую, закулисную цепочку статических приведений, и код проскальзывает через рецензирование невредимым.Несколько месяцев спустя прослеживается ошибка в использовании вами презренной техники.У вашего менеджера проекта могут быть проблемы с тем, чтобы не уловить эту злобу, но на кону ваша задница.У вас нет того выхода из тюрьмы без карты.Вы не пропустите Go.Вы идете прямо к линии безработицы.