不应转换无 public 继承关系的指针或引用
12.10 ID_castNonPublicInheritance
public 继承表示派生类是基类的某种扩展,而非 public 继承往往表示派生类是基类的某种例外,基类的方法不再适用于派生类的对象。
示例:
class A { .... };
class B: private A { .... };
void bar(A* a);
void foo(B* b) {
bar((A*)b); // Non-compliant
}
例中派生类 B 是对基类 A 的改造,再用 A 类方法处理 B 类对象是有问题的。
相关
依据
ISO/IEC 14882:2003 4.10(3)
ISO/IEC 14882:2011 4.10(3)