static_cast允许在继承层次中执行向下转换(指针或引用),但也不能将某种类型的指针转换为不相关的其他类型的指针。如果没有可用的转换构造函数,static_cast()无法将某种类型的对象直接转换为另一种类型的对象。
reinterpret_cast()在执行转换时不会执行任何类型检测。
static_cast()不执行运行期间的类型检测。dynamic_cast()为继承层次结构内的类型转换提供运行时检测。可用它转换指针或引用。dynamic_cast()在运行时检测底层对象的类型信息。如果类型转换没有意义,将会返回一个空指针(用于指针)或招聘一个std::bad_cast异常(用于引用)。
static_cast()或reinterpret_cast()沿着继承层次结构向下执行同样的类型转换。dynamic_cast()的不同之处在于它会执行运行时(动态)类型检测,而static_cast()或reinterpret_cast()甚至会不执行不正确的类型转换。
运行时类型信息存储在对象的虚函数表中。因此,为使用dynamic_cast(),类至少要有一个虚方法。如果类不具有虚函数表,常用使用dynamic_cast()将导致编译错误。
本页共7段,572个字符,1239 Byte(字节)