可以安全地将NULL / 0传递给dynamic_cast吗?

时间:2011-03-01 14:27:10

标签: c++ null dynamic-cast

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

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

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

然后我阅读了MSDN文档

  

将空指针值转换为   空指针的值   目的地类型由dynamic_cast。

然后我可以安全地删除?:构造。这是C ++ 便携式吗?

这样新代码就是

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

当然假设 someBasePtr 为null或有效,即 wild 指向垃圾......

3 个答案:

答案 0 :(得分:71)

§5.2.7/ 4:

  

如果v的值是空指针   指针大小写中的值,结果   是R类型的空指针值。

因此您不必自己检查空指针。对于operator delete也是如此,删除空指针无效。

答案 1 :(得分:20)

是的,您可以在空指针上使用dynamic_cast

答案 2 :(得分:5)

是,请在标准中查看5.2.7.4。