更改 C++ 20 中作用域枚举的默认值初始化?

问题描述 投票:0回答:1

是否可以更改 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);
}
c++
1个回答
0
投票

这对于枚举是不可能的(除非你愿意将 No 的值更改为 0x0)。枚举不是类类型(即使在 class 中有 enum class),所以你不能像类的成员函数/构造函数/析构函数/等那样影响它们的行为。

相反,你必须围绕它创建一个类包装器,你可以在其中定义一个默认构造函数来做任何你想做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.