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

rit*_*ITW 5 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; 
}
Run Code Online (Sandbox Code Playgroud)

我不明白以下一行::

 int *p = (int*) &objBix;//Explicit type cast of a class object to integer pointer type
Run Code Online (Sandbox Code Playgroud)

eca*_*mur 12

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

9.2班级成员[class.mem]

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

因此int *p = (int*) &objBix;是一个指针objBix.x,因为objBix是标准布局; 其两个数据成员xyprivate,和类没有virtual方法或基类.

  • 注意:这仅适用于*标准布局*类型.添加虚拟功能,您将处于未定义的行为状态. (5认同)
  • 这也违反了阶级的可见性.x和y都是私有的. (2认同)