C++中的四种强制类型转换
C++的强制类型转换符有:reinterpret_cast、static_cast、dynamic_cast、const_cast.
1.reinterpret_cast:操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型,而没有进行二进
制转换.reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有
类型时用到它.我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的.
2.static_cast(expression):该运算符把expression转换为type类型,但没有运行时类型检查来保
证转换的安全性.它主要有如下几种用法:
1.用于类层次结构中父类和子类之间指针或引用的转换.
进行上行转换(把子类的指针或引用转换成父类表示)是安全的;
进行下行转换(把父类的指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的.
2.用于基本数据类型之间的转换,如把int转换成char,把int转换成enum.这种转换的安全性要开发人员保证.
3.把空指针转换成目标类型的空指针.
4.把任何类型的表达式转换成void类型.
注:static_cast不能转换掉expression的const、volatile或者__unaligned属性.
3.dynamic_cast(expression):type必须是类的指针、类的引用或者void*;
如果type是类指针类型,那么expression也必须是一个指针,如果type是一个引用,那么expression也必须
是一个引用.dynamic_cast运算符可以在执行期决定真正的类型.如果downcast(向下转换)是安全的(也就是
说,如果父类指针或者引用确实指向一个子类对象)这个运算符会传回适当转型过的指针.如果downcast不安
全,这个运算符会传回空指针(也就是说,父类指针或者引用没有指向一个子类对象).dynamic_cast主要用于
类层次间的上行转换和下行转换,还可以用于类之间的交叉转换.在类层次间进行上行转换时,dynamic_cast
和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更
安全.
4.const_cast(expression):该运算符用来修改类型的const或volatile属性.除了const或
volatile修饰之外,type和expression的类型是一样的.
1.常量指针被转换成非常量指针,并且仍然指向原来的对象;
2.常量引用被转换成非常量引用,并且仍然指向原来的对象;
3.常量对象被转换成非常量对象.
阅读(865) | 评论(0) | 转发(0) |