当没有检查返回值为NULL
时,是否有任何目的使用dynamic_cast
?如果我正在查看代码库,并且将空值检查从返回值中省略,那么使用static_cast
可能会如此吗?使用dynamic_cast而不用空值检查
A *a = dynamic_cast<A *>(b);
foo(*a); //might as well have used a static_cast
我读过所有的谷歌对此事得到,它似乎是检查空是唯一的原因,但我还没有看到任何人站出来说“不dynamic_cast的空检查浪费周期(RTTI可能导致代码膨胀)。“
编辑:如果在类型之间存在虚拟继承,那么static_cast
将失败,其中dynamic_cast
不会。就我而言,情况并非如此。
如果new_type是指向某个类D的指针或引用,并且表达式的类型是指向其非虚拟基B的指针或引用,则static_cast将执行向下转换。 **如果B不明确,不可访问,或虚拟基地(或虚拟基地的基地)为D,则这种向下转换是不合格的**。这种static_cast不进行运行时检查,以确保对象的运行时类型实际上是D **,并且只有在通过其他方式保证此前提条件时才可以安全使用,例如实现静态多态性。[来源](http://en.cppreference.com/w/cpp/language/static_cast) –