【发布时间】:2011-12-10 19:26:55
【问题描述】:
我正在尝试使用 reinterpret_cast 将指针转换为另一种类型
class MyClassA
{
int x;
int y;
public:
MyClassA();
~MyClassA();
};
class MyClassB
{
int x;
int y;
public:
MyClassB();
~MyClassB();
};
例如,如果我将指向 MyClassA 的指针转换为 MyClassB,那么使用 reinterpret_cast 这种转换会起作用吗?代码可移植性如何?
而且,正如我所指出的:
(5.2.10/4) 指针可以显式转换为任何整数类型 大到足以容纳它。
这是否意味着任何指针,例如 MyClassA* 只能转换为 int* 指针?如果我是对的?
【问题讨论】:
-
对于第二部分,这意味着任何指针(IE
MyClassA*或int *)都可以转换为整数类型,例如 long,因为您的机器上的sizeof(long) >= sizeof(MyClassA *). So on a machine using 8 byte pointers and 8 byte longs you could say:int * X;长 y = (long)x;` -
@PaulPRO:我明白了,知道为什么我要转换一个指向整数的指针吗?它也会是不可移植的吗?
-
@user1086635:与将指针转换为另一个指针的原因相同。在做本质上不可移植的事情时。使用 reinterpret_cast 使代码突出,因此当有人阅读它时,请注意并仔细阅读。
标签: c++ reinterpret-cast