我有一节课:
class A
{
public:
double a;
float b;
double c;
};
我想在类中打印数据成员偏移量,而不是我使用:
double A::* pm = &A::a;
cout << *(int *)&pm << endl;
效果很好并打印&#39; 0&#39;但我不想使用中间变量pm
cout << *(int *)&A::a << endl;
我收到编译错误:无效的类型转换
答案 0 :(得分:0)
假设您使用偏移引用以字节为单位的偏移量。
你可以尝试这个解决方案:
(size_t) &(((A*)0)->a) // prints 0
实际上,这是宏offsetof
的实现,建议为WhozCraig。
...
cout << "A::a => " << (size_t) &(((A*)0)->a)
<< "\nA::b => " << (size_t) &(((A*)0)->b)
<< "\nA::c => " << (size_t) &(((A*)0)->c);
...
结合您的数据,以前的代码段将会打印出来:
A::a => 0
A::b => 8
A::c => 16