是否可以更改 C++ 20 中作用域枚举的默认值初始化行为?
例如,在下面的代码中,我希望一个 MyEnum
变量在用 MyEnum::No
MyEnum myValue{};
初始化
using MyEnumRootType = unsigned int;
using MyEnum = enum class EMyEnum: MyEnumRootType {
Yes = 0x1,
No = 0x2
};
int main() {
const MyEnum myValue{}; // <- 0
std::cout << static_cast<MyEnumRootType>(myValue);
}
这对于枚举是不可能的(除非你愿意将 No
的值更改为 0x0
)。枚举不是类类型(即使在 class
中有 enum class
),所以你不能像类的成员函数/构造函数/析构函数/等那样影响它们的行为。
相反,你必须围绕它创建一个类包装器,你可以在其中定义一个默认构造函数来做任何你想做的事情。