可移植地安全地将 NULL/zero 传递给 Dynamic_cast?

出于检查空指针的习惯,我有时候会写:

MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...

实际上,在传递到动态强制转换之前检查空指针,并且还检查返回值。

然后我阅读了 MSDN 文档

空指针值转换为 控件的空指针值 动态转换的目标类型。

看起来我可以安全地删除? : 结构。这是 C + + 便携式的吗?

这样,新的代码将是

MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...

当然,假设 基地为 null 或者有效,即不是指向垃圾的 狂野..。

22820 次浏览

是的,可以对空指针使用 dynamic_cast

5.2.7/4:

如果 v 的值是空指针 值,则结果为 是 R 类型的空指针值。

所以您不必自己检查空指针。对于操作符删除也是一样,删除空指针没有任何效果。

是的,检查5.2。7.4在标准。