c++ - LLVM 是避免动态转换规则的异常(exception)吗?

标签 c++ design-patterns llvm dynamic-cast

LLVM 有自己的 RTTI 替代方案,它比内置 RTTI 的速度有所提高,并允许动态转换为没有 vtable 的类 (dyn_cast)。但是,它仍然可以完全按照 dynamic_cast<> 的方式使用。尽管它确实允许它与更多类一起使用,但已被使用。

dyn_cast<> template documentation

LLVM 是一个享有盛誉的 C++ 项目,所以这似乎与俗语背道而驰,即过多的动态转换是糟糕设计的标志,也称为代码异味。当然,与标准 dynamic_cast 相比,性能更好的动态转换并不能改善其在设计中的使用。 .那么谁在这里?在 C++ 代码中是否存在大规模使用动态转换是一个好的设计选择的情况? Google 在 LLVM 主干源代码中发现了 690 次这种动态转换。

Uses of dyn_cast<> in LLVM trunk

最佳答案

虽然性能下降是避免的原因 dynamic_cast<>对于大型类层次结构,这并不是您想要避免使用它们的唯一原因。性能好与坏,不应该更鼓励使用 dyn_cast<>因为这个说法。

另一方面,使用 dynamic_cast<> 绝对没有错当它是完成工作的最佳工具时。如果它的使用是合理的,并且是解决问题的最干净的方法,那么无论“俗语”如何,它总是正确的。

我当然不会仅仅因为他们使用 dynamic_cast<> 就避开流行项目。小号,goto s 或任何其他失宠的成语。

关于c++ - LLVM 是避免动态转换规则的异常(exception)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1610875/

相关文章:

C++ 删除语法

c++ - Pthread实例变量运行类中的方法

c++ - 实现 C++ 访问者模式避免循环依赖

oop - 设计模式查询

c++ - 如何使用 LLVM pass 将变量设置为 volatile 或 const

C++ 复制构造函数 + 指针对象

javascript - 从模块加载特定方法。设计模式

design-patterns - 数据映射器、存储库和工作单元模式

c++ - 移动函数体,避免完全克隆

python - numba/npyufunc/omppool.cpp :5:10: fatal error: 'omp.h' file not found