将对象的显式类型转换为int *

时间:2012-08-23 13:35:52

标签: c++

以下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

1 个答案:

答案 0 :(得分:12)

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

  

     

9.2班级成员[class.mem]

     

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

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