Рассмотрим следующий пример кода.
#include <iostream>
using namespace std;
class base
{
public:
void func()
{
cout << "base::func()" << endl;
}
};
class derived : public base
{
public:
void func()
{
cout << "derived::func()" << endl;
}
};
void dummy(base *bptr)
{
derived *dptr = static_cast<derived*> (bptr);
dptr->func();
}
int main()
{
base bob1;
derived dob1;
dummy(&dob1); //Line1
dummy(&bob1); //Line2
}
В Line1 я передаю адрес объекта производного класса функции dummy
, которая принимает указатель на объект базового класса. Таким образом, static_cast
в функции dummy
безопасна.
В Line2 я передаю адрес объекта базового класса в функцию. Так что static_cast
в функции dummy
небезопасно.
Но когда я выполняю код, программа ведет себя нормально. Я думал, по слову not safe
программа должна крашиться во время выполнения. Но никакого сбоя не произошло.
Вот результат, который я получаю.
derived::func()
derived::func()
По какой причине программа не падает во время выполнения?