关于这个问题有很多问题,但似乎没有人专门解决这个问题:有没有保证dynamic_cast是一个恒定时间操作?或者它是否在类层次结构中是线性的?我可以想到一些方法可以实现它在恒定时间内执行,但一个天真的方法肯定是走在继承链。 C ++标准是否对它施加了任何限制?
答案 0 :(得分:1)
阅读了C ++规范,据我所知,dynamic_cast
的运行时没有限制。该规范的相关部分纯粹关注dynamic_cast
如何运作而不是时间复杂性的可观察行为。
据我所知,dynamic_cast
和RTTI的大多数实现通常通过在运行时在类型层次结构中行走并尝试确定转换是否成功来工作。还有其他技术可以做到这一点,对于小型层次结构,可以在时间O(1)中工作,但我不相信任何主要的C ++实现都可以做到这一点。
希望这有帮助!