我从C ++ Primer(第5版)中读到以下内容:
dynamic_cast具有以下形式:
dynamic_cast<
type*
>(e)dynamic_cast<
type&
>(e)- 醇>
dynamic_cast<
type&&
>(e)...
在所有情况下,e的类型必须是从目标类型公开派生的类类型,目标类型的公共基类,或者与目标类型相同。如果e具有这些类型中的一种,则转换将成功。否则,施法失败。
换句话说,作者声称如果e的类型是目标type
的基于公共的类,那么演员表会成功,所以我尝试了以下代码:
class Base{
public:
virtual void print(){std::cout << "Base" << std::endl;}
};
class type: public Base{
public:
virtual void print(){std::cout << "Derived..." << std::endl;}
};
int main(){
Base* e = new Base;
std::cout << dynamic_cast<type*>(e); // line 15
}
不幸的是,第15行的动态强制转换失败了(我们得到了一个nullptr),为什么?