gpt4 book ai didi

c++ - 当涉及到无关类时,reinterpret_cast 是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 00:46:13 25 4
gpt4 key购买 nike

下面代码输出的前两行是两个空行,第三行和第四行是两个不相等的大数,例如:1914733619147192

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

class B {
public:
B() : m_d(0.0) { }
protected:
double m_d;
};

int main() {
A *pa = new A;
B *pb = new B;
std::cout << reinterpret_cast<char*>(pa) << std::endl;
std::cout << reinterpret_cast<char*>(pb) << std::endl;
std::cout << (int)reinterpret_cast<char*>(pa) << std::endl;
std::cout << (int)reinterpret_cast<char*>(pb) << std::endl;

return 0;
}

我想知道上面代码中 reinterpret_cast 的返回值到底是什么。谢谢!

最佳答案

你正在做未定义的行为。编译器可以自由地生成几乎可以做任何事情的代码,包括创建一个机器人回到过去给 K&R 的 parent 服用事后避孕药,从而从一开始就阻止 C 语言的发明。

在上面的前两种情况下,您的编译器改为解释 int 的字节。和一个 double具有值(value) 0作为以 nul 结尾的字符数组,并将其视为 0 长度缓冲区,因此不打印任何内容。

在第二组(int)转换案例,它为您提供了较低的 sizeof(int) 的整数表示从 new 获得的指针值的字节数 | .

这些都不足为奇,但都不可靠。从严格的别名到优化,当您进行未定义的行为时,编译器可以做一些疯狂的事情,即使您没有附加时间机器或机器人,UB 的影响也可能在 带有 UB 的代码运行之前发生.

关于c++ - 当涉及到无关类时,reinterpret_cast 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39428938/

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