我曾经让人向我解释过这一点,但我对细节不太清楚:所以当您有一个枚举时,比如在C中,其中的枚举没有起始值,如下所示:
enum Level {
LOW,
MEDIUM,
HIGH
};
编译器只是将任意整数值赋给这些人.即使您要显式指定整数:
enum Level {
LOW = 0,
MEDIUM = 1,
HIGH = 2
};
现在您只是在做编译器本来可能做的事情,但是显式地做了.
但是,对于更复杂的枚举,比如Java或Rust中的枚举,情况又如何呢?例如,摘自《铁 rust 》一书的枚举部分:
enum IpAddr {
V4(u8, u8, u8, u8),
V6(String),
}
当很久以前向我解释它时,我隐约记得有人提到这是通过使用2个 struct 来处理的,类似于:
struct enums {
0, //arbitrary value used for V4
1 //arbitrary value used for V6
}
struct values {
u8 array[4],
char * string
}
其中第一个 struct 的任意值以某种方式映射到它们可以存储的值上.我还记得,向我解释它的人称这种枚举为某个术语,其中包含"记录"一词.我在这个网站或其他地方找不到任何关于这项技术的提及,所以如果有人能解释一下,或者至少告诉我应该研究什么主题,我将不胜感激.