【发布时间】:2017-11-08 05:55:34
【问题描述】:
在 C++ 入门(第 5 期)19.2.1 中关于 dynamic_cast。它说,要让dynamic_cast<type*>(e) 成功,
e 的类型必须是公开派生自的类类型 目标类型,目标类型的公共基类,或与目标相同 输入
但是,对于以下代码:
class B{
public:
virtual ~B(){}
};
class D : public B{};
B *pb = new B;
D *pd = dynamic_cast<D*>(pb);
if(pd == 0) cout << "err" << endl;
输出是“错误”。但是 pb 的类型是 D 类型的公共基类。
这是 C++ 入门(第 5 篇)中的错误吗?还是我只是误解了这些词?
【问题讨论】:
-
pb必须首先指向D。你有一个B。 -
你误会了。
-
@StoryTeller:由于
pb的类型为B*,它不能指向除B以外的任何东西。 -
@KerrekSB -
Dis-aB然而:P
标签: c++ dynamic-cast