gpt4 book ai didi

c++ - 将对象显式类型转换为 int *

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:27 25 4
gpt4 key购买 nike

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

最佳答案

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

9.2 Class members [class.mem]

20 - A pointer to a standard-layout struct object, suitably converted using a reinterpret_cast, points to its initial member (or if that member is a bit-field, then to the unit in which it resides) and vice versa.

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

关于c++ - 将对象显式类型转换为 int *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com