#include<iostream>usingnamespacestd;#include<typeinfo>classA{public:virtualvoidfoo(void){}};classB:publicA{voidfoo(void){}};classC:publicA{voidfoo(void){}};intmain(void){Bb;A*pa=&b;B*pb=dynamic_cast<B*>(pa);//pa是指向B类型的基类指针,OK//C*pc=dynamic_cast<B*>(pa);//pa不是指向C类型的基类指针,errorBb1;A&ra=b1;B&b2=dynamic_cast<B&>(ra);//C&c1=dynamic_cast<C&>(ra);errorreturn0;}上面两个错误都是,编译时不报错,运行时报错.dynamic_cast主要是将指向子类的基类指针转化为子类的指针转换过程中会检查目标和期望转换的对象是否一致,一致转换成功,否则失败,如果转换为指针,则失败返回NULL,如果是引用失败返回bad_cast异常