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