5

以下 c++ 代码的输出是什么?

#include<iostream> 
using namespace std;
class IndiaBix
{
    int x, y; 
    public:
    IndiaBix(int xx)
    {
        x = ++xx;
    } 
    ~IndiaBix()
    {
        cout<< x - 1 << " ";
    }
    void Display()
    {
        cout<< --x + 1 << " ";
    } 
};
int main()
{
    IndiaBix objBix(5);
    objBix.Display();
    int *p = (int*) &objBix;
    *p = 40;
    objBix.Display();
    return 0; 
}

我没看懂下面这行::

 int *p = (int*) &objBix;//Explicit type cast of a class object to integer pointer type
4

1 回答 1

12

可以将(标准布局类型的)对象指针转换为指向其第一个成员的指针。这是因为保证标准布局对象的第一个成员与整个对象具有相同的地址:

9.2 类成员 [class.mem]

20 - 指向标准布局结构对象的指针,使用 reinterpret_cast 适当转换,指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然。

因此int *p = (int*) &objBix;是指向 的指针objBix.x,因为objBix是标准布局;它的数据成员xyare private,并且该类没有virtual方法或基类。

于 2012-08-23T13:38:04.173 回答