gpt4 book ai didi

c++ - 为什么我可以毫无错误地转换不相关类的指针?

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:01 25 4
gpt4 key购买 nike

我一直在试验指针并编写了以下代码:

#include <iostream>

using std::cout;

struct A
{
int a;
char b;
A(){ a = 4; }
};

struct B
{
int c;
B(){ c = 5; }
};

A *a = new A;
B *b = new B;

int main()
{
a = (A*)b;
cout << a -> a; //5
}

为什么B*可以转换为A*?任何指针都可以转换为任何其他指针吗?

最佳答案

"Can any pointer be converted to any other pointer?"

如果您使用像这样的 C 风格转换,是的。

a = (A*)b; 

b指向的结构将只是(重新)解释,就像它是一个 A .正确的 C++ 等价物是

a = reinterpret_cast<A*>(b);

您通过一致性从此类类型转换中获得的体验不太可能符合预期。
换句话说:您将遇到各种未定义的行为,访问a 的任何成员。在做了这样的 Actor 之后。


应该使用 static_cast<>让编译器检查这些类型是否相关,并且可以以某种方式合理地转换

a = static_cast<A*>(b); 

检查这些在线示例以了解 static_cast<> 的差异和 reinterpret_cast<> .

关于c++ - 为什么我可以毫无错误地转换不相关类的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24743489/

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