将一种类型转换为另一种类型,转换后的变量,它的内部数据存储方式也随之发生改变,有四个显示的类型转换函数,reinterpret_cast,const_cast,static_cast,dynamic_cast.前面三个是在编译期间实现转换的,最后一个是在运行时实现转换,还可返回转换成功与否标志。
double d=3.2;
int i=d;//隐式转换,i=3
double d=3.2;
int i=static_cast<int>(d);//显式转换,i=3
转换函数的原型:
reinterpret_cast<new_type>(expression)
const_cast<new_type>(expression)
static_cast<new_type>(expression)
dynamic_cast<new_type>(expression)
将expression表达式的值转换为new_type类型的值。
reinterpret_cast:
用于任意指针(或引用)类型之间的转换,指针与足够大的整数类型之间的转化(从整数类型到指针类型,无视大小)。不修改指针变量值数据存放格式,只在编译时重新解释指针的类型。不能用于非指针类型的转换。还可将一个指针值转换为整型数。即expression必须是个指针类型。不能将const指针转换为void*指针。
const_cast:
去除指针变量的常量属性,将它转换为一个对应指针类型的普通变量。也可将一个非常量的指针变量转换为一个常指针变量。不能将非指针的常量变为普通变量。
static_cast:
用于基本类型和具有继承关系的类型之间的转换。会改变变量的内部表示方式。继承类和基类的指针可以相互转换,继承类可转换为基类,不可转化基本类型的指针,基类不可转换为继承类。
dynamic_cast:
只能在继承类对象的指针之间或引用之间进行转换。
vc++编译器默认禁止使用RTTI信息,若要使用dynamic_cast,需执行“工程-设置”在“c++”选项卡中,选择“c++language”,勾选“允许运行时类型信息RTTI”
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。