当枚举具有重复值时,如果将int值强制转换为枚举会发生什么情况
When enum has duplicate values, what will happen if an int value is cast to enum?
请参阅以下代码:
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所指出的,枚举通常是语法糖,使整数值(无论其值是多少)对读者更有意义。
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 将作用域枚举转换为基础类型
- 枚举类的 C 样式强制转换到基础类型 char 的引用
- 用于 boost::p roperty_tree 的通用枚举转换器
- 在编译时将强类型枚举器转换为其基础类型?
- SWIG-将C++枚举转换为Python枚举
- 如何将C++代码中的枚举转换为 C
- 将枚举转换为_variant_t C++
- 将枚举转换为值的正确方法
- 通用 int -> 可以使用模板进行枚举转换吗?
- 在 C++ 中通过 int 将枚举转换为枚举
- 将枚举转换为字符串
- 超出范围的枚举转换能否生成基础类型之外的值
- 将已有的枚举转换为字符串
- 如何自动将强类型枚举转换为整型
- 如何将c++枚举转换为ctypes ?结构使用Python 2.7.2
- 将C++枚举转换为python int
- C++11 将枚举转换为整数
- 有没有一种简单的方法可以将C++枚举转换为字符串
- 应该如何将C位标志枚举转换为C++