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