1、static_cast <type_id> (expression)(把expression类型转换为type_id类型)
用于类层次结构中基类和派生类之间指针或引用的转换:有上行转换和下行转换;
上行转换:派生类--->基类(安全)
下行转换:基类--->派生类(不安全,没有动态类型检查)
用于基本数据类型之间的转换(由开发人员保证其安全性);
把空指针转换为目标类型的空指针;
把任何类型的表达式转换为void类型;
注意:static_cast不能转换掉expression的const、volatile、_unaligned等属性;
Eg: int i;
float f = 166.7f;
i = static_cast<int> (f); ==>结果为 i = 166
2、dynamic_cast <type_id> (expression)
type_id必须是类的指针,类的引用或void*类型;
若type_id是指针,expression也必须是指针,若type_id是引用,expression也必须是引用;
安全:基类指针或引用,指向派生类对象,传回适当的转型过的指针或引用;
不安全:基类指针或引用没有指向派生对象,传回空指针;
在进行下行转换时,具有类型检查的功能,比static_cast安全;
3、reinterpret_cast <type_id> (expression)
type_id必须是一个指针或引用或算数类型或函数类型或成员指针;
先把指针类型转换成整数类型,再把转换后的整数转换成原类型的指针,可以得到该指针的指针值;
4、const_cast <type_id> (expression)
用来修改类型const或volatil属性,除了const和volatile修饰之外,type_id和expression类型相同;
用于常量指针或引用被转换为非常量指针或引用,并且仍然指向原来的对象;
用于常量对象指向非常量对象;