首页 > 解决方案 > reinterpret_cast - 任何整数或枚举类型的值都可以转换为指针类型

问题描述

https://en.cppreference.com/w/cpp/language/reinterpret_cast

任何整数或枚举类型的值都可以转换为指针类型。

他们不是在这里谈论结构和类,所以它们不包括在内?

它们还意味着,如果我有一个像MyEnum obj;then这样的枚举对象,obj可以转换为MyEnum *obj;?

标签: c++c++11

解决方案


他们不是在这里谈论结构和类,所以它们不包括在内?

正确的。在解决以下问题后,这可能会更有意义:

它们还意味着,如果我有一个像MyEnum obj;then这样的枚举对象,obj可以转换为MyEnum *obj;?

不,枚举不会成为指向自身的指针。这意味着 ifobj是一个基础值为 的枚举42,则reinterpret_cast可以将其转换为指向内存位置的指针42,并且您可以声称您想要的任何类型的对象都驻留在那里。在大多数系统上,内存位置42无效,但您仍然可以使用SomeObject * ptr = reinterpret_cast<SomeObject *>(obj). 试图取消引用这个指向内存位置 42 的指针可能会导致崩溃。

当整数需要通过只接受指针(不是 100% 可靠)的 API 传输,或者整数包含将有效指针转换为整数类型的结果时,这种转换的有用性就出现了。在后一种情况下,您询问的强制转换成为逆运算,恢复原始指针。


推荐阅读