c++ - reinterpret_cast - 任何整数或枚举类型的值都可以转换为指针类型
问题描述
https://en.cppreference.com/w/cpp/language/reinterpret_cast
任何整数或枚举类型的值都可以转换为指针类型。
他们不是在这里谈论结构和类,所以它们不包括在内?
它们还意味着,如果我有一个像MyEnum obj;
then这样的枚举对象,obj
可以转换为MyEnum *obj;
?
解决方案
他们不是在这里谈论结构和类,所以它们不包括在内?
正确的。在解决以下问题后,这可能会更有意义:
它们还意味着,如果我有一个像
MyEnum obj;
then这样的枚举对象,obj
可以转换为MyEnum *obj;
?
不,枚举不会成为指向自身的指针。这意味着 ifobj
是一个基础值为 的枚举42
,则reinterpret_cast
可以将其转换为指向内存位置的指针42
,并且您可以声称您想要的任何类型的对象都驻留在那里。在大多数系统上,内存位置42
无效,但您仍然可以使用SomeObject * ptr = reinterpret_cast<SomeObject *>(obj)
. 试图取消引用这个指向内存位置 42 的指针可能会导致崩溃。
当整数需要通过只接受指针(不是 100% 可靠)的 API 传输,或者整数包含将有效指针转换为整数类型的结果时,这种转换的有用性就出现了。在后一种情况下,您询问的强制转换成为逆运算,恢复原始指针。
推荐阅读
- javascript - ApolloProvider useQuery 组合不从 AWS AppSync 获取数据,在 React 项目中
- javascript - 单线创建具有先前嵌套对象的所有键但每个值的键值对子集的对象
- java - 有没有办法在apache poi 5.0.0中设置我的X轴(类别)或Y轴(值)的majorUnit,minorUnit,最小值和最大值?
- android - 使用捏缩放启动 WebView 以适应缩放
- linux - DM-Verity 运行时替换数据和哈希设备
- php - PHP 5 八进制、十六进制、十进制和二进制的类型杂耍
- c# - 如何分析存储过程以确定是否返回行
- python - RuntimeError:Cython 扩展不可用
- laravel - 发布一个模型:json中的父级吗?
- google-chrome - 如何使 chrome 扩展清单 v3 服务人员重新激活以现场端口消息?