出于检查空指针的习惯,我有时会写:
MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...
实际上,在传递给动态转换之前检查空指针,并检查返回。
然后我阅读了 MSDN 文档
空指针值通过 dynamic_cast 转换为目标类型的空指针值。
看来我可以安全地删除 ?: 构造。这是 C++可移植的吗?
这样新的代码将是
MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...
当然假设someBasePtr为空或有效,即不是指向垃圾的狂野......