LLVM是避免动态强制转换规则的例外吗?

a-d*_*dai 6 c++ design-patterns dynamic-cast llvm

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

dyn_cast<> 模板文档

LLVM是一个声誉良好的C++项目,所以这似乎是在面对一个普遍的说法,即太多的动态转换是设计糟糕的标志,也被称为代码气味.当然,性能更好的动态模型无法改善其在设计中的使用,而不是标准dynamic_cast.那么谁在这里?在C++代码中,是否存在大规模使用动态铸造是一个很好的设计选择的情况?谷歌在LLVM中继源代码中出现了690次这种动态转换.

用途dyn_cast<>在LLVM干线

Mat*_*ner 7

虽然性能命中是避免dynamic_cast<>大型类层次结构的一个原因,但它并不是您可能想要避免它们的唯一原因.不论表现与否,都不应该dyn_cast<>因为这种说法而更加鼓励使用.

另一方面,dynamic_cast<>当它是最好的工具时,使用它绝对没有错.如果它的使用是合理的,并且是解决问题的最简洁方法,那么无论"俗话"如何,它总是正确的.

我肯定不会仅仅因为他们使用dynamic_cast<>s,gotos或任何其他不受欢迎的成语而避开流行项目.