转型操作其实是一个没有办法的办法,一般情况下,能不用就不用;如果转型不可避免,也要用最安全的办法进行
旧式转型操作
(T)expression;
T(expression);
这是我们惯用的两种旧式转型方法,比如从int
转型到double
新式转型操作
建议全部采用新式转型,抛弃旧式转型
static_cast
static_cast
的用法是最简单的,但是要注意一点,它是对参数进行拷贝后再进行操作的,不是在原对象身上进行操作,详情见https://stackoverflow.com/questions/9084835/why-does-static-castthis-to-a-base-class-create-a-temporary-copy
dynamic_cast
作用是安全地由基类 down casting 到派生类
值得指出的是,dynamic_cast
的开销可能比较大,在对性能要求比较高的场合,要尤其注意
dynamic_cast
的使用场合一般是,手头有一个基类的指针或引用,但你很确信实际的类型是一个派生类
网友评论