#include <iostream>
struct B
{
virtual ~B() {}
};
struct D : B
{
};
int main() {
B* d = new D;
B* b = new B;
D* p1 = (D*)b; // Сделает то же, что и reinterpret_cast. Т.е. в результате не nullptr
std::cout << p1 << std::endl;
D* p2 = dynamic_cast<D*>(b); // Проверит, что b не указывает на экземпляр D и вернет nullptr
std::cout << p2 << std::endl;
D* p3 = reinterpret_cast<D*>(b);
std::cout << p3 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEIKewoJdmlydHVhbCB+QigpIHt9Cn07CgpzdHJ1Y3QgRCA6IEIgCnsKfTsKCmludCBtYWluKCkgewoJCglCKiBkID0gbmV3IEQ7CglCKiBiID0gbmV3IEI7CgkKCUQqIHAxID0gKEQqKWI7IC8vINCh0LTQtdC70LDQtdGCINGC0L4g0LbQtSwg0YfRgtC+INC4IHJlaW50ZXJwcmV0X2Nhc3QuINCiLtC1LiDQsiDRgNC10LfRg9C70YzRgtCw0YLQtSDQvdC1IG51bGxwdHIKCXN0ZDo6Y291dCA8PCBwMSA8PCBzdGQ6OmVuZGw7CgkKCUQqIHAyID0gZHluYW1pY19jYXN0PEQqPihiKTsgLy8g0J/RgNC+0LLQtdGA0LjRgiwg0YfRgtC+IGIg0L3QtSDRg9C60LDQt9GL0LLQsNC10YIg0L3QsCDRjdC60LfQtdC80L/Qu9GP0YAgRCDQuCDQstC10YDQvdC10YIgbnVsbHB0cgoJc3RkOjpjb3V0IDw8IHAyIDw8IHN0ZDo6ZW5kbDsKCQoJRCogcDMgPSByZWludGVycHJldF9jYXN0PEQqPihiKTsgCglzdGQ6OmNvdXQgPDwgcDMgPDwgc3RkOjplbmRsOwkKCQoJcmV0dXJuIDA7Cn0=