Если у меня есть эта структура классов:static_cast между «несвязанными типами»
class A
{
public:
int a;
void funcA(){a = 0;}
};
class B
{
public:
int b;
void funcB(){b = 0;}
};
class C: public A, public B
{
public:
int c;
void funcC(){c = 0;}
};
Почему я могу выполнить этот бросок?
A* pA = new A;
C* pC = static_cast<C*> (pA);
B* pB = static_cast<B*> (pC);
pB->funcB();
A и B не связаны, не так ли?
Эта последовательность отливок будет прекрасной, если вы начали с 'A * pA = new C;'. Таким образом, ни язык, ни компилятор не прекратят делать их: проблема заключается не в приведениях, а в качестве значения ввода. –
Приведение из 'pA' в' C * 'уже не определено. – fefe
Здесь нет «проблемы», мне было интересно, почему это допустимо. Компилятор * остановил бы меня, если бы классы не были в одной иерархии, да? Я предположил, что актерский состав от pA до C * был ОК, так как C получен из A. – QuoVadis