当枚举具有重复值时,如果将int值强制转换为枚举会发生什么情况

When enum has duplicate values, what will happen if an int value is cast to enum?

本文关键字:枚举 转换 什么情况 int 如果      更新时间:2023-10-16

请参阅以下代码:

enum ChunkIndex {
  ZeroIndex = 0,
  SpecializedIndex = ZeroIndex,
  SmallIndex = SpecializedIndex + 1,
  MediumIndex = SmallIndex + 1,
  HumongousIndex = MediumIndex + 1,
  NumberOfFreeLists = 3,
  NumberOfInUseLists = 4
};
ChunkIndex index0 = (ChunkIndex) (0);
ChunkIndex index3 = (ChunkIndex) (3);
ChunkIndex index4 = (ChunkIndex) (4);

您可以看到,至少存在两个等于0的枚举值。

与3相同。

将0强制转换为枚举ChunkIndex时会发生什么?

与3相同的问题。

上面的代码来自jdk8/openjdk/hotspot/src/share/vm/memory/metaspace.cpp第83行及其以上7行。

[严格关于C++]

您将拥有与枚举的0值相匹配的0转换为枚举值

ChunkIndex index0 = (ChunkIndex) (0);
if(index0 == ChunkIndex::ZeroIndex)
    cout << "hello"; // Gets printed
if(index0 == ChunkIndex::SpecializedIndex)
    cout << "world"; // Gets printed

这也适用于C++11类型安全枚举

enum class ChunkIndex

正如PaulR所指出的,枚举通常是语法糖,使整数值(无论其值是多少)对读者更有意义。