c++类型转换问题:和atl相关
#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)))之后结果发生了变化,
请那为高手帮忙解答一下;;;感谢;;;