gpt4 book ai didi

c++ - 任何人都可以解释重新解释转换如何在此代码中工作

转载 作者:行者123 更新时间:2023-11-30 01:13:02 24 4
gpt4 key购买 nike

阅读下面正在使用的程序重新解释_cast。

#include <iostream>

class A
{
public:
A() : m_i(0) { }
protected:
int m_i;
};

class B
{
public:
B() : m_d(0.0) { }

protected:
double m_d;
};

class C : public A , public B
{
public:
C() : m_c('a') { }
private:
char m_c;
};

int main()
{
C c;
A *pa = &c;
B *pb = &c;

bool z = (reinterpret_cast<char*>(pa) == reinterpret_cast<char*>(pb));
std::cout << z;
return 0;
}

运行这个程序后它打印0,谁能解释一下为什么 z 在这个程序中会出错??

最佳答案

Can anyone explain how reinterpret cast is working in this code

reinterpret_cast<char*>(pa)求值为 char* 类型的指针其数值与pa相同.使用:

bool z = (pa == pb);

A 以来导致编译器错误和 B没有直接关系。使用

bool z = (reinterpret_cast<char*>(pa) == reinterpret_cast<char*>(pb));

允许您比较 pa 的数值和 pb .

After running this program it prints 0, can anyone explain why z is coming false in this program??

pa 的数值和 pb不一样。因此,结果。您可以使用:

cout << "pa: " << std::hex << (void*)pa << std::endl;
cout << "pb: " << std::hex << (void*)pb << std::endl;

打印这些值并说服自己它们不相同。

如果你看一下 C 的内存布局,它看起来像:

+------+
| m_i | // The A sub-object
+------+
| m_d | // The B sub-object
+------+
| m_c |
+------+

当你使用

C c;
A* pa = &c;
B* pb = &c;

pa指向 A C 的子对象和 pb指向 B C 的子对象.从图中可以看出,A之间有一个偏移量子对象和 B子对象。因此,pa 的数值和 pb是不同的。最有可能相差 sizeof(m_i) .

关于c++ - 任何人都可以解释重新解释转换如何在此代码中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33007557/

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