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

时间:2014-09-20 08:52:02

标签: c++ enums

请参阅以下代码:

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行以上。

1 个答案:

答案 0 :(得分:2)

[严格来说是关于C ++]

你将使0-converted-to-enum值与枚举的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 noted,枚举通常是语法糖来呈现整数值(无论它们的价值如何)对读者更有意义。