Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46909
  • 博文数量: 13
  • 博客积分: 1497
  • 博客等级: 上尉
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-04 00:03
文章分类
文章存档

2011年(1)

2010年(1)

2009年(11)

我的朋友

分类: C/C++

2009-02-16 22:51:21

C++中的类型转换我一直是和C的混着用,一直平安无事。今天遇到一麻烦。
class A: public B,public C
{
}
class C
{
}
class B
{
C *pC = dynamic_cast(this);//没有问题.
C *pC = (C*)this;//能编译。pC==this,会宕机。这种转换和转换void 指针一样。
C *pC = static_cast(this);//无法编译通过。
C *pC = (C*)((A*)this);//正确.得到的地址和dynamic_cast是一致的。
}

综上可知(C*)着这种转换如果能static_cast就会static_cast,如果不行就成了C中的类型转换了。正在想既不用dynamic_cast,也要保证效率的方法.
代价比较 :typeid > dynamic_cast>virtual function>static_cast>()
测了一下dynamic_cast的时间是virtual function的15倍,实在出乎我的意料以后不再用dynamic_cast检查是否可以类型转换安全,还是通过virtual function吧。
阅读(697) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~