АлёнаC++: http://alenacpp.blogspot.ru/2005/08/c.html
static_cast
между указателями корректно, только если один из указателей - это указатель на void
или если это приведение между объектами классов, где один класс является наследником другого. То есть для приведения к какому-либо типу от void*
, который возвращает malloc
, следует использовать static_cast
.
int * p = static_cast<int*>(malloc(100));
Если приведение не удалось, возникнет ошибка на этапе компиляции. Однако, если это приведение между указателями на объекты классов вниз по иерархии и оно не удалось, результат операции undefined
. То есть, возможно такое приведение: static_cast<Derived*>(pBase)
, даже если pBase
не указывает на Derived
, но программа при этом будет вести себя странно.