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

sdg*_*sdg 62 c++ null dynamic-cast

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

MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...
Run Code Online (Sandbox Code Playgroud)

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

然后我读了MSDN文档

通过dynamic_cast将空指针值转换为目标类型的空指针值.

然后我可以安全地删除?:构造.这个C++是可移植的吗?

这样新代码就可以了

MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...
Run Code Online (Sandbox Code Playgroud)

当然假设someBasePtr是null或有效,即不是疯狂指向垃圾......

小智 79

§5.2.7/ 4:

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

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


sha*_*oth 20

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


sse*_*vic 5

是的,请在标准中查看5.2.7.4.