Основное отличие staticcast и dynamiccast заключается в том, как они проверяют совместимость типов при приведении:
staticcast используется для допустимых приведений типов, например для преобразования между числовыми и enum, приведения указателей к типу void* и наоборот. 1 dynamiccast применяется для приведения вниз по иерархии наследования, с особым поведением, если объект не имеет нужного типа: для указателей возвращается NULL, для ссылок создаётся исключение std::bad_cast. 1