出于检查空指针的习惯,我有时会写:
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 指向垃圾......
答案 0 :(得分:71)
§5.2.7/ 4:
如果v的值是空指针 指针大小写中的值,结果 是R类型的空指针值。
因此您不必自己检查空指针。对于operator delete也是如此,删除空指针无效。
答案 1 :(得分:20)
是的,您可以在空指针上使用dynamic_cast
。
答案 2 :(得分:5)
是,请在标准中查看5.2.7.4。