dynamic_cast 可以帮助我们从父类转换到子类, 而且 type 必须是指针, 如果通过类型检查, 万事大吉, 否则会返回 NULL. 所以就可以用来检查变量类型.(必须保证类有虚表)

class A {
    virtual void test() {};
};
class B : public A {};
class C : public A {};
 
int main() {
	    A* a = new B;
    B* b = dynamic_cast<B*>(a);// pointer
    C* c = dynamic_cast<C*>(a);// NULL
    return 0;
}

使用这个东西需要开启 RTTI, 因为他需要在运行时对比类型