这里第二次演员表示错误
cast.cc:35:35: error: cannot dynamic_cast ‘base’ (of type ‘class CBase*’) to type ‘class CDerived*’ (source type is not polymorphic)
CBase * base = new CDerived;
CBase* pb;
CDerived * der = new CDerived;
CDerived* pd;
pb = dynamic_cast<CBase*>(der); // ok: derived-to-base
pd = dynamic_cast<CDerived*>(base); // wrong: base-to-derived
Run Code Online (Sandbox Code Playgroud)
这意味着什么?
如果我使基类具有多态性,为什么会这样?
有人可以让我知道这背后的基本概念.
因为标准是这样说的(参见C++标准中的[expr.dynamic.cast]部分):
...
dynamic_cast<T>(v)...
v应该是多态类型的指针或左值
实际上,因为可以生成动态下转换(即从base到派生)所需的运行时类型信息(RTTI)以及vtbl/vptr机制,如果没有多态成员函数则不需要.
另一方面,向上转换(即派生到基础)不需要RTTI(没有运行时决定).引用标准的同一部分:
Run Code Online (Sandbox Code Playgroud)struct B { }; struct D : B { }; void foo(D* dp) { B* bp = dynamic_cast<B*>(dp); // equivalent to B* bp = dp; }
| 归档时间: |
|
| 查看次数: |
1529 次 |
| 最近记录: |