Mike's blog

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 23 Stories :: 83 Comments :: 0 Trackbacks

常用链接

留言簿(17)

我参与的团队

搜索

  •  

最新评论

在C++中,除了支持C语言中的隐式类型转换外,同时引入了四种显示的类型转换函数,以确切的标识出正在进行的转换类型。
函数原型为(均为模板函数):
static_cast<new_type>(expression)
const_cast<new_type>(expression)
reinterpret_cast<new_type>(expression)
dynamic_cast<new_type>(expression)

前三个是在编译时期进行类型转换的,而最后一个则是在运行时期进行转换的,即dynamic_cast函数需要RTTI的支持,如果是VC下,需要手动打开RTTI支持选项。

static_cast主要完成相关类型之间的转换,比如整型到枚举、整型到浮点等。但static_cast不能转换掉expression的const、volitale、或者__unaligned属性

const_cast一般用于强制消除对象的常量性,它是唯一能做到这一点的 C++ 风格的强制转型,但需注意的是只能转换指针或引用类型,而不能转换普通常量类型。
如:
const int a = 1;
int b = const_cast <int>(a);
是错误的。

reinterpret_cast用于字节数相同的类型之间的转换,常用的就是整型和指针之间、函数指针类型之间进行转换。操作符仅仅重新解释了对象的比特模型而没有进行二进制转换,需谨慎使用,一般只在把类型映射回原有类型时使用。

dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。
你能用dynamic_cast把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)。

posted on 2009-01-12 23:22 老狼 阅读(627) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理