Может ли кто-нибудь сказать мне, почему это не компилируется:
struct A { };
struct B : public A { };
int main()
{
B b;
A* a = &b;
B* &b1 = static_cast<B*&>(a);
return 0;
}
Теперь, если вы замените статическое приведение на:
B* b1 = static_cast<B*>(a);
тогда он компилируется.
Редактировать: очевидно, что компилятор обрабатывает A*
и B*
как независимые типы, иначе это сработало бы. Вопрос больше в том, почему это желательно?
a
не является ссылкой на указатели, это указатель. - person andre   schedule 17.01.2013B*&
— это ссылка на указатель наB
. - person Some programmer dude   schedule 17.01.2013dynamic_cast
заставляет компилятор встраивать информацию о типе времени выполнения в эту иерархию классов. Объедините это с относительно медленной работойdynamic_cast
, и вы не захотите использовать это решение, если в этом нет необходимости. - person Agentlien   schedule 17.01.2013dynamic_cast
здесь недопустимо. - person James Kanze   schedule 17.01.2013