编译器警告(等级 1)C4540
dynamic_cast 用于转换为不可访问或不明确的基;运行时测试将失败(“type1”到“type2”)
使用 dynamic_cast
从一种类型转换为另一种类型。 编译器确定强制转换始终会失败(返回 NULL),因为基类不可访问(例如 private
)或不明确(例如在类层次结构中多次出现)。
下面显示了此警告的示例。 B 类派生自 A 类。该程序使用 dynamic_cast
从 B 类(派生类)强制转换为 A 类,这始终会失败,因为 B 类是 private
,因此无法访问。 将 A 的访问权限更改为 public
可解决此警告。
// C4540.cpp
// compile with: /W1
struct A {
virtual void g() {}
};
struct B : private A {
virtual void g() {}
};
int main() {
B b;
A * ap = dynamic_cast<A*>(&b); // C4540
}