当前位置:  开发笔记 > 编程语言 > 正文

C++ static_cast vs dynamic_cast

如何解决《C++static_castvsdynamic_cast》经验,为你挑选了1个好方法。



1> Barry..:

在上面的代码中,我应该使用dynamic_cast但是使用static_cast不正确.static_cast不应该在向下转换时使用,因为编译器无法确定我们正在进行正确的转换.

具有讽刺意味的dynamic_cast是,由于你的类型不是多态的,所以实际上这里的形式不合理.

那说,static_cast当然可以用来垂头丧气.你是正确的,编译器不能进行类型检查,但在很多情况下,你有一个Base*并知道它指向a Derived*,所以你可以手动进行转换.一个非常常见的案例是CRTP:

template 
class Base {
    Derived& self() { return *static_cast(this); }
    // ...
};


class Foo : Base { ... };

Base总是一个T,让垂头丧气是安全的.

的优势static_castdynamic_caststatic_cast是免费的,但dynamic_cast价格昂贵.C++的口头禅不会为你不需要的东西买单.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有