如何使用“cout”打印数据成员的地址(在类偏移中)

时间:2014-09-11 08:22:45

标签: c++ pointers datamember

我有一节课:

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;

我收到编译错误:无效的类型转换

1 个答案:

答案 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