You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法用int*指针指向基类型为int的枚举变量?

问题解答

为什么int* myPtr = &mytype;无效?

C++是强类型语言,即便你给枚举指定了底层类型int,GameObjectType依然是一个独立的枚举类型,和int属于不同的类型系统。编译器会严格执行类型安全检查,不允许隐式地将枚举变量的地址转换为int*指针,以此避免意外的类型错误。

如何让int指针指向枚举变量?

有两种常见的可行方案:

方案1:显式类型转换(直接操作枚举变量的内存)

利用reinterpret_cast完成类型转换——因为你已经指定枚举的底层存储是int,这种转换是合法的:

// 直接将枚举变量地址转换为int*
int* myPtr = reinterpret_cast<int*>(&mytype);

注意:这种方式直接操作枚举变量的内存,修改指针指向的值时要确保在枚举成员的合法范围内,否则会触发未定义行为。

方案2:将枚举值存入int变量后再取地址

如果不需要直接修改原枚举变量,更安全的方式是先把枚举值转换为int类型,再对这个int变量取地址:

int myIntVal = static_cast<int>(mytype);
int* myPtr = &myIntVal;

这种方式避免了直接操作枚举类型的内存,类型转换逻辑更清晰,也降低了误操作的风险。

内容的提问来源于stack exchange,提问作者Venelin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:40:06