C++ 使用不带null检查的动态_cast

C++ 使用不带null检查的动态_cast,c++,dynamic-cast,null-check,C++,Dynamic Cast,Null Check,当返回值未检查为NULL时,使用dynamic\u cast有什么意义吗?如果我查看的是一个代码库,并且返回值中省略了null检查,那么使用static\u cast是否也可以呢 A *a = dynamic_cast<A *>(b); foo(*a); //might as well have used a static_cast A*A=dynamic_cast(b); foo(*a)//还不如用静态演员阵容 我已经阅读了谷歌在这方面提供的所有信息,似乎检查null是唯一

当返回值未检查为
NULL
时,使用
dynamic\u cast
有什么意义吗?如果我查看的是一个代码库,并且返回值中省略了null检查,那么使用
static\u cast
是否也可以呢

A *a = dynamic_cast<A *>(b);
foo(*a);   //might as well have used a static_cast
A*A=dynamic_cast(b);
foo(*a)//还不如用静态演员阵容
我已经阅读了谷歌在这方面提供的所有信息,似乎检查null是唯一的原因,但我还没有看到有人站出来说“没有null检查的dynamic_cast是对周期的浪费(以及使用RTTI可能导致代码膨胀)。”

编辑:有人告诉我,如果类型之间存在虚拟继承,
static\u-cast
会失败,而
dynamic\u-cast
不会。就我而言,情况并非如此

当返回值未检查为NULL时,使用动态_cast有什么意义吗


如果您确定类实例的类型不同,则不能检查
nullptr
。在这种情况下,为什么不使用
static\u cast
?当涉及虚拟继承时,您可能无法使用
静态\u cast
。详细信息可在该问题的答案中找到:

如果新类型是指向某个类D的指针或引用,而表达式类型是指向其非虚拟基B的指针或引用,则静态类型转换将执行向下转换。如果B是不明确的、不可访问的或D的虚拟基(或虚拟基的一个基),则此向下转换是不正确的。此类静态向下转换不进行运行时检查,以确保对象的运行时类型实际上是D,并且仅当通过其他方式(例如在实现静态多态性时)保证此前提条件时,才可以安全地使用此向下转换。我懂了。因此,如果
a
B
之间存在一种虚拟关系,那么
静态转换将是一个问题,
动态转换将是合理的,对吗?就我而言,没有。