以下代码似乎适用于我尝试过的编译器(clang,g ++,Linux和Mac OS),但它是否能保证始终能达到人们的期望?
struct A {
virtual void foo() = 0;
};
struct A2 {
virtual void foo() = 0;
};
struct B : public A2 {
void foo() {
printf("test\n");
}
};
int main() {
B* b = new B;
((A*)b)->foo();
}
Run Code Online (Sandbox Code Playgroud)
我意识到这是不好的做法,不应该这样做,但它一般是否有效?