在C++中一共有四种强转类型分别为:static_cast,const_cast,reinterpret_cast和dynamic_cast
类型转换的一般形式为:cast-name<type>(expression)
顶层const:表示指针本身是个常量 eg:int *const p;
底层const::表示指针所指的对象是一个常量 eg:int const *p
1.static_cast
只要不包括底层const,任何具有明确定义的类型转换都可以用。
2.const_cast
只能改变底层的const。
3.reinterpret_cast
a.在指针之间转换,将一种类型的指针转换为另一种类型的指针
b.将指针转换为一个整形数,但不能用于非指针类型的转换
4.dynamic_cast
将基类的指针或引用转换为派生类的指针或引用(我们称从已定义类产生新类的过程称为派生。已存在的用来派生新类的类为基类,又称父类。由已存在的类派生出的新类称为派生类,又称为子类。例如:从哺乳动物派生出狗,哺乳动物是父类,狗是子类。)
对指针进行dynamic_cast :失败返回null,成功返回正常cast后的对象指针
对引用进行dynamic_cast : 失败抛出一个异常的bad_cast,成功返回正常cast后的对象指针
对于向上转换(从派生类转换到基类),无论是指针还是引用都是安全的
对于向下转换类型:
a.基类指针所指对象是派生类类型,这种转换是安全的
b.基类指针所指对象为基类类型,在这种情况下,dynamic_cast在运行时做检查,转换失败,返回结果为0