我知道以下代码会产生编译错误:
class A{ public : virtual void name(){cout<<typeid(this).name()<<endl;}; };
class B:protected A{public : virtual void name(){cout<<typeid(this).name()<<endl;};};
void foo(B* b)
{
A * a = dynamic_cast<A*>(b); //Error : 'A' is an inaccessible base of 'B'
return;
}
但是为什么他在 C++ Stroustrup 书 (15.4.1) 中写道
class BB_ival_slider:public Ival_slider,protected BBslider{ //...
};
void f(BB_ival_slider*p)
{
// ok
BBslider* pbb2 = dynamic_cast<BBslider*>(p); // ok: pbb2 becomes 0
}
该行不应该是编译错误吗?因此,要么我的 gcc 错误地将其标记为编译错误,要么是不可想象的 stroustrup 错字,或者最有可能我错过了一些东西......