70

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

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

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

然后我阅读了 MSDN 文档

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

看来我可以安全地删除 ?: 构造。这是 C++可移植的吗?

这样新的代码将是

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

当然假设someBasePtr为空或有效,即不是指向垃圾的狂野......

4

3 回答 3

91

§5.2.7/4:

如果在指针情况下 v 的值是空指针值,则结果是类型 R 的空指针值。

因此,您不必自己检查空指针。运算符删除也是如此,删除空指针无效。

于 2011-03-01T14:31:58.820 回答
21

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

于 2011-03-01T14:28:47.003 回答
5

是的,检查标准中的 5.2.7.4。

于 2011-03-01T14:32:48.973 回答