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

如何让编译器在作用域枚举定义中使用自定义重载运算符?

问题解答

为什么当前代码会出现这种行为?

在枚举类的枚举器初始化过程中,已定义的枚举器(比如Enum::A)会被视为其底层整数类型的常量(默认是int),而非Enum类型的实例。因此第8行的~Enum::A会触发内置的位取反运算符,得到-2,而非调用你自定义的operator~(Enum)。

解决方案

显式将Enum::A转换回Enum类型,强制编译器调用自定义的运算符重载。修改第8行代码如下:

enum class Enum { A = 1, B = ~static_cast<Enum>(Enum::A) };

修改后程序输出会变为5 and 5,符合预期。

补充说明

枚举类的枚举器在初始化表达式中本质是底层类型的常量表达式,只有通过显式类型转换,才能将其转为枚举类型实例,从而匹配你自定义的运算符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:09:53