C++中不同类树之间的转换

luc*_*nte 3 c++ casting

以下代码似乎适用于我尝试过的编译器(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)

我意识到这是不好的做法,不应该这样做,但它一般是否有效?

Mic*_*ker 6

如果人们期望未定义的行为,那么它是有保证的.

  • 很棒的回复. (2认同)