2

dynamic_cast不检查返回值时有什么用途NULL吗?如果我正在查看一个代码库,并且它从返回值中省略了 null 检查,那么使用它是否也一样好static_cast

A *a = dynamic_cast<A *>(b);
foo(*a);   //might as well have used a static_cast

我已经阅读了谷歌提供的关于此事的所有内容,似乎检查 null 是唯一的原因,但我还没有看到有人站出来说“没有 null 检查的 dynamic_cast 是浪费周期(和RTTI 代码可能会膨胀)。”

编辑:有人告诉我,如果类型之间存在虚拟继承,那么在没有的static_cast地方dynamic_cast就会失败。在我的情况下,情况并非如此。

4

1 回答 1

3

当未检查返回值是否为 NULL 时,使用 dynamic_cast 有什么目的吗?

nullptr如果您确定类实例是不同的类型,您可能不会检查。为什么不在static_cast这种情况下使用?static_cast当涉及到虚拟继承时,您可能无法使用。可以在这个问题的答案中找到详细信息:当涉及到虚拟继承时,为什么不能使用 static_cast 进行向下转换?

于 2017-03-28T19:13:00.737 回答