A static_cast
вызывает преобразование, которое потенциально небезопасно.
B* b = static_cast<B*>(a);
Это было бы допустимо, если бы a
указывал на объект A
, который фактически являлся подобъектом базового класса объекта B
, однако это не так. Приведение заставляет преобразование.
B* b = a;
Здесь нет приведения, и (правильно) не допускается неявное преобразование из указателя базового класса в указатель производного класса. Указатель на производный класс всегда можно преобразовать в указатель на базовый класс, поскольку объект производного класса всегда содержит подобъект базового класса, но не каждый экземпляр базового класса является подобъектом определенного типа производного класса.