对象的实际类型与当前静态类型不相关,并调用其非静态成员函数
C++-Undefined-Behavior-56
示例:
struct A { int foo(); };
struct B { .... };
int bar(void* p) {
return static_cast<T*>(p)->foo();
}
int main() {
B b;
return bar(&b); // Undefined behavior
}
例中 A 与 B 是不同且没有继承关系的类,通过不合理的类型转换调用非静态成员函数会导致未定义的行为。
依据
ISO/IEC 14882:2003 9.3.1(1)-undefined
ISO/IEC 14882:2011 9.3.1(2)-undefined