转换指的是经过改变一个变量的类型为别的类型从而改变该变量的表示方式。安全
C++标准定义了四个新的转换符:reinterpret_cast、static_cast、dynamic_cast和const_cast,目的在于控制类(class)之间的类型转换。
1.static_cast
static_cast能够用于类层次结构中基类和子类之间指针或引用的转换。把子类的指针或引用转换成基类表示是安全的,但把基类指针或引用转换成子类指针或引用时,因为没有动态类型检查,因此,它是不安全的。基类和子类之间的动态类型转换通常建议使用dynamic_cast。static_cast能够用做对象继承之间转换,只不过有安全隐患。
2.dynamic_cast
dynamic_cast用于对象的指针和引用,当用于多态类型转换时,容许隐式转换及相反的转换操做,与static_cast的不一样之处在于,而在相反的转换过程当中,dynamic_cast会检测操做的有效性,若是返回的不是被请求的有效完整对象,则返回null,反之返回这个有效的对象,若是是引用返回无效时,则会抛出bad_cast异常。
3.const_cast
const_cast用来修改类型的const或volatile属性,具体而言,const_cast会操纵传递对象的const属性,设置或者移除该属性。
4.reinterpret_cast
reinterpret_cast用来处理无关类型之间的转换,能够转换任意一个32位整数,包括全部的指针和整数。能够把任何整数转成指针,也能够把任何指针转成整数,以及把指针转化为任意类型的指针,但不能将非32位的实例转成指针。ide