static_cast
编译时检查。用法是static_cast<type>(convertedvariable)。它的作用是把convertedvariable转化为type类型。
static_cast运算符有以下4中用法:
(1)用于基本数据类型的转化。如把int转为char,把int转为short int;
(2)把空指针转为目标类型的空指针
(3)把任意类型的变量/表达式转化为void类型
(4)用于类层次结构中父类和子类之间指针和引用的转换。上行转换(子类到基类)是安全的,而下行转换(基类到子类)不一定安全,是因为static_cast只是在编译时进行类型检查,没有运行时的类型检查。static_cast下行转换不安全的表现是即使下行转换失败,static_cast也返回一个非NULL的指针。
dynamic_cast
运行时检查。用法同static_cast。
dynamic_cast主要用于基类和子类之间的指针和引用的转换,由于具有运行时检查,因此可以保证下行转换的安全。这里的安全指的是转换成功后返回正确的类型指针,如果转换失败,则返回NULL。