dynamic type:
比如
class A { }; class B : public A { }; B l; A& k = l;
Here k is a reference to an object of type A, but the real type of the referred object, its dynamic type, is B.
Here "dynamic" has the meaning of "known only at run-time".
所以根据文档:
dynamic_cast会进行动态类型检查,只有符合运行时类型的对象才能转换,转换失败会返回NULL(*)或者抛异常std::bad_cast.(&),而static_cast不会检查类型正确性。
dynamic_cast 可以classes up, down, and sideways along the inheritance hierarchy.
B* a = dynamic_cast <B*>l; // correct
B b = B;
B* a = dynamic_cast <B*>b ; // return null
static_cast 就像c风格的强制类型转换(int)一样,repreint_cast用于指针转换,也和c风格很相似,const_cast用于将类型的const性去掉或装上,但是将原本是const的对象转成const的行为是未定义的,由程序员自己把控。