使用reinterpret指向整数的指针
Pointer to integer using reinterpret
我试图使用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*指针?如果我是对的?
(5.2.10/4)指针可以显式地转换为任何足够大的整型。
表示int*
到int
。指针不是整型。
转换不相关类型的指针是个坏消息,不应该这样做。它可以工作,但不能移植。
继承可以工作。从基类继承类型!
至于这是否有效,我不知道,这将取决于实现。
然而,没有标准保证这将工作(所以不要这样做),MyClassA和MyClassB是两个独立的类型,即使它们在结构上相同也是不兼容的。
同样适用于int*.
如果你需要两者之间的转换,你可以做一个A到B的赋值运算符
class MyClassA{
...
operator=(const MyClassB& mcb)
{
this.x=mcb.x;
this.y=mcb.y;
}
};
如果你需要访问MyClassA中的整数元素
//in MyClassA
int& getX(){ return x; }
const int& getX() const { return x; }
int& x=mca.getX();
这并不意味着您可以强制转换不相关的类型。这意味着你可以将指针转换为64位整数(例如),如果在你的平台上64位整数足够大,可以包含指针值。
PS:我想提一下,你所做的是完全偏离标准,但你可能会逃脱它在许多平台/编译器:)
我对第一个问题的回答是肯定的。指针只是一个变量(整型),它的值是指向另一个内存位置的地址。这就是为什么你能做以下的事情。
(*(void(*)())0)(); /*Ref: Andrew Koenig C Traps and Pitfals*/
或
#define CARD_INTERFACE_ADDRESS 0x4801C
struct A * = new (CARD_INTERFACE_ADDRESS) struct A
MyClassA * ptr_a
不能(逻辑上)转换为int* ptr_i
,因为您所说的是变量ptr_a
持有的地址是前者中的MyClassA
的地址,而在后者中您说的是说ptr_i
是int
的地址。
相关文章:
- 整数键映射到头文件中的成员函数指针
- 如何实现容纳整数和无效指针的双向链表?
- 使用指针将 ASCII 值添加到整数
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 在C++中,如果我可以直接将整数分配给指针而不使用"new",为什么要使用"new"?
- 取消引用指向整数的指针时获得不同的结果
- 为什么此指针值不能转换为整数的规则是什么?
- 禁止指针和整数之间的比较C++
- 为什么在将 void 指针转换为整数指针时出现分段错误
- ISO C++禁止指针和整数 [-fpermissive] [c++] 之间的比较
- 指向整数数组和打印总和的指针
- 将uint64_t转换为字节时从不同大小的整数强制转换为指针
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- 如何在 c++ 中动态声明指向整数的指针数组?
- C++:这是使用整数变量作为函数调用指针的正确方法吗
- 如何在满足常量表达式的同时将整数传递给指针,传递给 std::array<double、integer>?
- 创建<int>对整数数组指针的矢量引用 (C++)
- 整数指针数组的元素是否可以指向整数数组?
- 将指针整数(int**)转换为c中的String
- 为什么此指针/整数比较会生成分段错误