#include <windows.h>
#include <iostream>
using namespace std;class Base1 {
public:
  virtual void f() { }
};class Base2 {
public:
  virtual void f() { }
};class Base3 {
public:
  virtual void f() { }
};class Drive : public Base1, public Base2, public Base3 {
};#define _ATL_PACKING 8#define offsetofclass(base, derived) \
  ((DWORD)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING)int main() {
  cout << offsetofclass(Base1, Drive) << endl;
  cout << offsetofclass(Base2, Drive) << endl;
  cout << offsetofclass(Base3, Drive) << endl;
  return 0;
}程序的输出为: 
0
4
8在宏offsetofclass当中,((derived*)_ATL_PACKING)的值仍然是_ATL_PACKING,
为什么加上(static_cast<base*>((derived)_ATL_PACKING)))之后结果发生了变化,
请那为高手帮忙解答一下;;;感谢;;;