Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1464822
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: LINUX

2012-05-29 23:20:18

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) |
0

上一篇:freopen用法

下一篇:创建一个静态库

给主人留下些什么吧!~~