在OOP概念中,RTTI(运行时类型信息)是否也用于静态铸造或仅用于动态铸造?
如果它是特定的动态投射,那么证明你的答案是正确的,并请解释为什么没有RTTI for static_casting。
使用RTTI进行向下转换的重点是什么?
答案 0 :(得分:3)
静态强制转换是编译时构造,而RTTI是运行时现象。这意味着不,RTTI不用于static_cast
。
我建议你阅读this thread因为它有很多很好的信息。
答案 1 :(得分:0)
static_cast
没有运行时检查,因此可能不需要RTTI存在。 (当然,这取决于实现。)
dynamic_cast
进行运行时检查(因此需要某种形式的RTTI引擎盖),这使您有机会处理错误的演员!< / p>
答案 2 :(得分:0)
这是诀窍,如果你有一些类,如A,B,C,D,E,并且它们有一个共同的基类Base,那么从Base需要选择正确的类。只有在创建原始对象以具有相同类时,该转换才有效。在具有5个派生类和一个Base类的示例中,有1:5的机会使其正确。哪个不是很好,程序员经常选错了。 static_cast根本无法检测到问题,而在static_cast中错误选择类型会导致崩溃。 dynamic_cast可以检测它,但仅在运行时,即dynamic_cast也可能失败并返回NULL或抛出异常。需要RTTI才能使dynamic_cast正常失败。